Wix installer CAQuietExec пользовательское действие - PullRequest
5 голосов
/ 01 августа 2011

Я пытаюсь выполнить пользовательское действие в установщике Wix, чтобы разрешить привязку к сокету HTTP в Windows Server 2008. Однако установщик не совсем работает.

<CustomAction Id="GrantHttpPermission_Cmd" Property="GrantHttpPermission" Value="&quot;[SystemFolder]netsh.exe http add urlacl url=http://+:8732/ user=Service_account&quot;" Execute="immediate"/>
<CustomAction Id="GrantHttpPermission" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

...

<InstallExecuteSequence>
  <Custom Action="GrantHttpPermission_Cmd" After="CostFinalize"/>
  <Custom Action="GrantHttpPermission" After="ConfigureUsers">NOT Installed</Custom>
</InstallExecuteSequence>

Запустив установщик в режиме отладки, я получаю следующую ошибку.Я также попытался запустить программу установки от имени администратора с тем же выводом

MSI (s) (14:20) [11:03:00:440]: Executing op: CustomActionSchedule(Action=GrantHttpPermission,ActionType=3073,Source=BinaryData,Target=CAQuietExec,CustomActionData="C:\Windows\SysWOW64\netsh.exe http add urlacl url=http://+:8732/ user=Service_account")
MSI (s) (14:24) [11:03:00:440]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIF794.tmp, Entrypoint: CAQuietExec
CAQuietExec:  Error 0x80070002: Command failed to execute.
CAQuietExec:  Error 0x80070002: CAQuietExec Failed
CustomAction GrantHttpPermission returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
Action ended 11:03:00: InstallFinalize. Return value 3.

Может кто-нибудь пролить свет на то, что случилось с этой командой?

Ответы [ 2 ]

10 голосов
/ 01 августа 2011

Оказывается, это было связано с правильным цитированием команды. Строка GrantHttpPermission_Cmd нуждалась в "перемещении вокруг исполняемого файла, а не всей команды", а часть [SystemFolder] не требовалась. Окончательная команда выглядела так:

<CustomAction Id="GrantHttpPermission_Cmd" Property="GrantHttpPermission" Value="&quot;netsh.exe&quot; http add urlacl url=http://+:8732/ user=Service_account" Execute="immediate"/>

Все остальные команды были одинаковыми.

1 голос
/ 01 августа 2011

Попробуйте это:

<CustomAction Id="GrantHttpPermission_Cmd" Property="GrantHttpPermission" Value="[SystemFolder]netsh.exe http add urlacl url=http://+:8732/ user=Service_account" Execute="immediate"/>

Если вы заключите значение в кавычки (& quot;), вы получите неверную командную строку:

"C:\Windows\System32\netsh.exe http add urlacl url=http://+:8732/ user=Service_account"
...