Запуск Inno-Setup 5.5.9 (a) созданной установки в Windows 2016 DataCenter (64 бит) из Windows Сервиса, работающего под учетной записью SYSTEM, и получение следующей ошибки, регистрируемой (весь файл журнала ниже) ):
2020-03-13 11: 46: 24.093 Журнал открыт. (Часовой пояс: UT C -05: 00)
2020-03-13 11: 46: 24.093 Версия установки: Inno Версия настройки 5.5.9 (a)
2020-03-13 11:46: 24.093 Исходная установка EXE: C: \ Program Files (x86) \ 4PatientCare \ Shadow4PatientCare Cloud \ Shadow4PatientCareCloud_6.0.0.0_Install_2020-3-4_1.exe
2020-03-13 11: 46: 24.093 Команда установки строка: / SL5 = "$ 0,16433093,57856 , C: \ Program Files (x86) \ 4PatientCare \ Shadow4PatientCare Cloud \ Shadow4PatientCareCloud_6.0.0.0_Install_2020-3-4_1.exe" / VERYSILENT / SUPPRESSMSGBOXES / NOROR NOICONS / UpdateFromService
2020-03-13 11: 46: 24.093 Windows версия: 10.0.14393 (платформа NT: Да)
2020-03-13 11: 46: 24.093 64-разрядная Windows: Да
2020-03-13 11: 46: 24.093 Архитектура процессора: x64
2020-03-13 11: 46: 24.093 Привилегии пользователя: Административный
2020-03-13 11: 46: 24.108 64- режим установки бита: нет 2020-03-13 11: 46: 24.108 Создан временный каталог: C: \ Windows \ TEMP \ is-5GHEA.tmp
2020-03-13 11: 46: 24.108 Исключение сообщение:
202 0-03-13 11: 46: 24.108 По умолчанию используется ОК для скрытого окна сообщения (ОК):
Ошибка при создании класса окна.
2020-03-13 11: 46: 24.108 Настройка деинициализации.
2020-03-13 11: 46: 24.108 Журнал закрыт.
Установка отлично работает при запуске под интерактивной учетной записью пользователя, а также при запуске из cmdtool, вошедшего в систему как SYSTEM (через psexe c .exe -s -i cmd.exe). Однако при запуске из службы Windows, работающей в SYSTEM, происходит сбой с файлом журнала, как указано выше.
Одна вещь, которую я заметил: когда установка проходит успешно, строка файла журнала, которая начинается с «Командная строка установки», выглядит как:
2020-03-11 19: 24: 26.967 Командная строка установки: / SL5 = "$ 196601FA , 16807514,57856, C: \ Prog ...
Но при сбое это выглядит так:
2020-03-13 11: 46: 24.093 Командная строка установки: / SL5 = "$ 0 , 16433093,57856, C: \ Progr ...
, поэтому первый элемент, назначенный SL5, равен $ 0. Может ли это что-то значить? Кто-нибудь сталкивался с этим и нашел решение?
Вот код Delphi 2010 (32 бита), который запускает установку Inno внутри службы:
```
//-----------------------------------------------------------------------
procedure ExecNewProcess(cmdline : String; DoWait,DoShow:boolean);
// in cmdline the characters before the first space encountered is interpreted as the EXE to execute. The rest of the string are the arguments
var StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
StartInfo.dwFlags := STARTF_USESHOWWINDOW;
if DoShow then
StartInfo.wShowWindow := SW_SHOW
else
StartInfo.wShowWindow := SW_HIDE;
CreateOK := CreateProcess(nil, PChar(cmdline), nil, nil,False,
CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
if CreateOK and DoWait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
//close process & thread handles
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
//-----------------------------------------------------------------------
...
try
cmdline:='"' + dmAutoUpgrader.UpgradeFileName+'"'; // install file
cmdline:=cmdline + ' /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /NOICONS /UpdateFromService'; // arguments
UniqueString(cmdline);
ExecNewProcess(cmdline,true,false);
except
on E:Exception do
ControllerLog.add(DoLog,'Service, Error, Error=' + E.Message);
end;
...
//-----------------------------------------------------------------------
```