维克斯CustomAction ExeCommand失败?(WiX CustomAction Exe

2019-06-23 09:45发布

我有一个命令行我想在安装合并模块(通过创建的运行维克斯 )与下面的代码。

<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,但谷歌搜索不返回任何内容的兴趣。

如何解决这个问题?

Answer 1:

我看到你的代码中的许多问题。

  1. 您定于提交如果回滚被策略禁用,将不会被处理。

  2. 你是冒充UAC可以在UAC失效/升高的情况下,如果你的消费MSI不是由自举setup.exe是抬高UI /执行过程。

  3. 你已硬编码到一个路径system32其或者可能不存在,因为Windows没有被称为Windows或可能取决于OS平台上的32位或64位的系统文件夹中的文件夹。

  4. 您忽略返回代码,所以如果失败会安装继续下去。 插头和祈祷的人?

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

  6. 您将获得绝对没有注销EXE的。

  7. 你可能不知道的,可以直接调用发生的EXE自定义操作的问题。

下面是一些阅读,以帮助您了解这些问题:

  • 安装阶段,并在脚本执行选项在Windows安装程序自定义操作

  • 整合障碍的EXE自定义操作

现在我还要提到的是你可能重新发明轮子,但似乎维克斯内置的IIS自定义操作不公开,你需要的变化点。 这是一个耻辱。 所以我建议在看下面的功能来修复您的EXE调用:

  • 安静的执行自定义操作

我觉得这是呼唤你的EXE无闪烁的一个非常优雅的方式DOS中,适当的日志到您的MSI日志和许多微软的EXE关注修复。 从那里,你只需要解决它,所以你正确地解决了正确的32位或64位APPCMD。 我只安装目标服务器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 failing?