Пользовательское действие установщика Wix для запуска dism - PullRequest
1 голос
/ 08 ноября 2019

Так что этот установщик работает нормально, пока я не добавлю следующее, странная часть - после того, как он откатывает установку из-за ошибки, функции, которые я добавляю через dism.exe, фактически включены, как я хочу. Соблазн просто добавить что-то, чтобы игнорировать ошибку, но я бы не стал ее взламывать.

Соответствующий xml

<CustomAction Id="SetEnableWindowsFeatures" Property="BatchFeatures" Value="&quot;[System64Folder]Dism.exe&quot; /norestart /quiet /online /enable-feature /featureName:Client-DeviceLockdown /featurename:Client-EmbeddedShellLauncher /featurename:Client-KeyboardFilter" />
    <CustomAction Id="BatchFeatures" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Impersonate="no" />

 <InstallExecuteSequence>
      <Custom Action="SetEnableWindowsFeatures"     Before="BatchFeatures">NOT Installed</Custom>
      <Custom Action="BatchFeatures"                After="InstallFiles">NOT Installed</Custom>
    </InstallExecuteSequence>

Error generated

Executing op: ActionStart(Name=BatchFeatures,,)
Action 11:16:48: BatchFeatures. 
MSI (s) (24:2C) [11:16:48:829]: Executing op: CustomActionSchedule(Action=BatchFeatures,ActionType=3073,Source=BinaryData,Target=CAQuietExec,CustomActionData="C:\WINDOWS\system32\Dism.exe" /norestart /quiet /online /enable-feature /featureName:Client-DeviceLockdown /featurename:Client-EmbeddedShellLauncher /featurename:Client-KeyboardFilter)
MSI (s) (24:2C) [11:16:48:831]: Creating MSIHANDLE (131) of type 790536 for thread 24108
MSI (s) (24:A4) [11:16:48:832]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSIC518.tmp, Entrypoint: CAQuietExec
MSI (s) (24!D0) [11:16:50:676]: Creating MSIHANDLE (132) of type 790531 for thread 29392
CAQuietExec:  Error 0x80070bc2: Command line returned an error.
MSI (s) (24!D0) [11:16:50:676]: Closing MSIHANDLE (132) of type 790531 for thread 29392
MSI (s) (24!D0) [11:16:50:676]: Creating MSIHANDLE (133) of type 790531 for thread 29392
CAQuietExec:  Error 0x80070bc2: QuietExec Failed
MSI (s) (24!D0) [11:16:50:676]: Closing MSIHANDLE (133) of type 790531 for thread 29392
MSI (s) (24!D0) [11:16:50:676]: Creating MSIHANDLE (134) of type 790531 for thread 29392
CAQuietExec:  Error 0x80070bc2: Failed in ExecCommon method
MSI (s) (24!D0) [11:16:50:677]: Closing MSIHANDLE (134) of type 790531 for thread 29392
CustomAction BatchFeatures returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
MSI (s) (24:A4) [11:16:50:678]: Closing MSIHANDLE (131) of type 790536 for thread 24108
Action ended 11:16:50: InstallFinalize. Return value 3.

1 Ответ

1 голос
/ 09 ноября 2019

Сводка : похоже, вам нужна перезагрузка после запуска Dism.exe (0x80070bc2: ERROR_SUCCESS_REBOOT_REQUIRED). Но есть еще ...


Требуется перезагрузка с ошибкой : The error 0x80070bc2 means ERROR_SUCCESS_REBOOT_REQUIRED(ссылка на базу данных Magic Number - некоторые подробности о поиске ошибок , какие инструменты использовать). Другими словами, похоже, что установка прошла нормально, но код возврата настраиваемого действия указывает на необходимость перезагрузки, и вы настроили настраиваемое действие для проверки кода выхода. Can you just flush the error? You can. I wouldn't. What else is there? Полагаю, вы могли бы сбросить ошибку и проверить, какие функции установлены позже? Не очень хорошо.

API DISM : Вы можете получить доступ к DISM через API C ++ (Win32). Я бы честно попробовал это, а не инструменты командной строки из-за расширенного контроля возвращаемых значений, кодов ошибок и общего потока кода. После запуска кода C ++ также неплохо отлаживать ( просто подключить отладчик ):

C # : Похоже, кто-то создал оболочку C # для dism.exe, выдвигающую командные строки (не проверено).

Безопасность и обновления Windows : Управление установленными компонентами Windows не обязательно является хорошей вещью в пакете. Во-первых, я бы сразу запустил Windows Update , чтобы проверить, не открылись ли новые дыры в безопасности.

Active Directory? Я думаю, что эта установка Windows Feature лучше контролируется из Active Directory (централизованное управление для всех рабочих станций), но я не слишком знаком с этим процессом. Просто хотел упомянуть об этом. Судя по всему, это может быть корпоративный пакет для среды SOE? Если так, то я бы поговорил со старшим системным администратором, ребята? Также парни из службы безопасности, если для этого есть отдел? (Аудит). Иногда они сами просят такие пакеты ...


Ссылки :

...