Wix安装程序CAQuietExec自定义操作

6

我正在尝试在Wix安装程序中执行自定义操作,以授予在Windows Server 2008上绑定HTTP套接字的权限。但是安装程序似乎并没有完全工作。

<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.

有人能解释一下这个命令是怎么回事吗?


你尝试在普通控制台中运行命令了吗?它是否能够正常执行?查看它扩展成的形式(在日志文件中),并尝试手动运行相同的命令。 - Yan Sklyarenko
是的,看起来从命令行执行是正确的。但只有管理员权限才可以。 - Ceilingfish
2个回答

11

事实证明,这与正确引用命令有关。 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
很高兴知道它是那么简单。现在当你自己找到它时,你永远不会忘记它;-) - Yan Sklyarenko

1

试试这个:

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

如果你在引号(")中包含值,你将获得一个无效的命令行:
"C:\Windows\System32\netsh.exe http add urlacl url=http://+:8732/ user=Service_account"

谢谢您的评论,但这会导致安装程序抱怨命令没有以引号开头。 - Ceilingfish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接