gpt4 book ai didi

WiX CustomAction ExeCommand 失败?

转载 作者:行者123 更新时间:2023-12-03 00:28:24 25 4
gpt4 key购买 nike

我想在安装合并模块(由 WiX 创建)期间使用以下代码运行命令行。

<CustomAction
Id='SetWebsiteProtocols'
Execute='commit'
Return='ignore'
Impersonate="yes"
FileKey='Web.config'
ExeCommand='c:\windows\system32\inetsrv\appcmd.exe set app "Default Web Site/My Website" /enabledProtocols:http,net.tcp,net.pipe' />

<InstallExecuteSequence>
<Custom Action="SetWebsiteProtocols" After="InstallFiles"/>
</InstallExecuteSequence>

当我在命令行上运行命令(目前是硬编码)时,它工作正常。但是,在安装过程中运行时,它会失败。打开日志记录会显示错误代码 1721,但谷歌搜索不会返回任何有趣的内容。

如何解决这个问题?

最佳答案

我发现您的代码有很多问题。

  1. 您计划提交,如果策略禁用回滚,则不会处理该提交。

  2. 您正在冒充 UAC如果您使用的 MSI 不是由提升 UI/执行进程的 setup.exe 引导的,则在 UAC/提升的情况下可能会失败。

  3. 您已硬编码了 system32 文件夹的路径,该文件夹可能不存在,因为 WINDOWS 不必称为 WINDOWS,或者可能是 32 位或 64 位系统文件夹取决于操作系统平台。

  4. 您将忽略返回代码,因此如果失败,您的安装将继续进行。插入并祈祷有人吗?

  5. 在安装过程中,您将看到一个丑陋的大而闪烁的黑色控制台窗口,它只会尖叫“哦,这个家伙不知道他在做什么。”

  6. 您绝对不会退出 EXE。

  7. 您可能不知道直接调用 EXE 自定义操作可能会出现的问题。

以下阅读内容可帮助您理解这些问题:

现在我还要提一下,您可能正在重新发明轮子,但似乎 WiX 内置 IIS自定义操作不会暴露您需要的变化点。太可惜了。因此,我建议查看以下功能来修复您的 EXE 调用:

我发现这是一种非常优雅的调用 EXE 的方式,无需闪烁 DOS框,正确登录您的 MSI 日志并修复许多 Microsoft 的 EXE 问题。从那里您只需修复它,以便正确解析正确的 32 位或 64 位 appcmd。我的安装程序仅针对 Server 2008 R2,这是一个仅限 64 位的平台,因此我的代码如下所示:

(此代码增强了 InstallShield 未公开的内容...)

<CustomAction Id="SetIISAuthCAD"
Property="SetIISAuth"
Value="&quot;[System64Folder]inetsrv\appcmd.exe&quot; set config &quot;Default Web Site/MyApplication&quot; /section:system.webServer/security/authentication/windowsAuthentication /useAppPoolCredentials:true /commit:MACHINE/WEBROOT/APPHOST " />
<CustomAction Id="SetIISAuth"
BinaryKey="WixCA"
DllEntry="CAQuietExec64"
Execute="deferred"
Return="ignore"
Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="SetIISAuth"
Before="InstallFinalize">Not Installed</Custom>
<Custom Action="SetIISAuthCAD"
Before="SetIISAuth">Not Installed</Custom>
</InstallExecuteSequence>

关于WiX CustomAction ExeCommand 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com