Ошибка при создании класса Windows - запуск программы установки Inno из службы в Windows 2016 Server Datacenter - PullRequest
1 голос
/ 13 марта 2020

Запуск 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;
...
//-----------------------------------------------------------------------
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...