Получение значения result.message из установщика javascript
У меня есть установщик (файл.pkg) и использую дистрибутив XML. В проверке установки у меня есть функция javascript для проверки версии ОС, среди прочего. Если ОС находится за пределами допустимого диапазона, в свойстве result.message устанавливается сообщение об ошибке, в котором говорится что-то вроде:
Минимальная требуемая ОС составляет 10,8".
function min_system_version ()
{
/* Must be >= 10.8 */
return (system.compareVersions(system.version.ProductVersion, '10.8') >= 0);
}
function InstallationCheck()
{
if (min_system_version() == false)
{
my.result.title = system.localizedString('ALERT');
my.result.message = system.localizedString('FAILED_DESCRIPTION');
my.result.type = 'Fatal';
return false;
}
:
:
}
Это работает нормально, если я запускаю установщик напрямую. Но когда я запускаю установщик из демона, используя NSTask для запуска /usr/sbin/installer, "terminationStatus" возвращает 1 независимо от того, какая это была ошибка. В результате в системном журнале отображается только "Установка завершена со статусом 1". Примечание: поскольку проверка выполняется в предустановленном полете, в install.log пока ничего не отображается.
:
:
NSArray *args = [NSArray arrayWithObjects:@"-pkg", packagePath, @"-target", @"/", nil];
NSTask *installerTask = [NSTask launchedTaskWithLaunchPath:@"/usr/sbin/installer" arguments:args];
BOOL installed = NO;
[installerTask waitUntilExit];
NSTaskTerminationReason reason = [installerTask terminationReason];
if (NSTaskTerminationReasonUncaughtSignal == reason)
{
// Install exited because of an uncaught signal.
syslog(LOG_ERR, "Install exited because of an uncaught signal.");
}
else
{
int status = [installerTask terminationStatus];
syslog(LOG_ERR, "Install exited with status %ld.", (long)status);
installed = (status == 0);
}
:
:
Было бы хорошо, если бы я мог записать ошибку из функции javascript, но возможно ли это? И есть ли способ получить сообщение об ошибке, возвращаемое из JavaScript в NSTask? Я хотел бы показать фактическую ошибку в system.log, чтобы наши пользователи могли ее обнаружить.