wix
  • windows-installer
  • wix3.5
  • wix3
  • 2012-04-05 52 views 3 likes 
    3

    我有一個命令行,我希望在安裝合併模塊(由WiX創建)期間運行以下代碼。WiX CustomAction ExeCommand失敗?

    <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,但Google搜索沒有任何意義。

    我該如何解決這個問題?

    +0

    通過與記錄* [進程監控](http://en.wikipedia.org/wiki/Process_Monitor)*可能會得到更多信息,如:「15:06:30,2599355 appcmd.exe 924進程退出成功退出狀態:-1073740756」。對應於0xC000042C(無符號/十六進制)的-1073740756(有符號/十進制)是* [STATUS_ELEVATION_REQUIRED](http://msdn.microsoft.com/zh-cn/library/cc704588.aspx)*。這可能表示特權提升的問題。 – 2013-06-17 13:46:53

    回答

    10

    我發現你的代碼有很多問題。

    1. 如果回滾被策略禁用,您將被安排提交,這將不會被處理。

    2. 你是冒充UAC可以在UAC失效/升高的情況下,如果你的消費MSI不是由setup.exe被提升的UI /執行過程自舉。

    3. 您已硬編碼到system32文件夾的路徑,該路徑可能不存在,因爲WINDOWS不必稱爲WINDOWS,或者可能是32位或64位系統文件夾(具體取決於操作系統平臺)。

    4. 你忽略返回代碼,所以如果失敗會安裝繼續下去。插入並祈禱任何人?

    5. 你將有一個大丑閃爍的黑色控制檯窗口,在安裝過程中,只是尖叫「哦,這傢伙不知道他在做什麼。」

    6. 您將絕對不會從EXE中註銷。

    7. 你可能不知道的,可以直接調用發生的EXE自定義操作的問題。

    下面是一些閱讀,以幫助您瞭解這些問題:

    現在我還要提到的是你可能重新發明輪子,但似乎維克斯的內置IIS自定義操作不公開,你需要的變化點。這太遺憾了。所以我建議在看下面的功能來修復您的EXE調用:

    我覺得這是呼喚你的EXE無閃爍DOS箱的一個非常優雅的方式,適當的登錄到您的MSI日誌並修復許多Microsoft的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> 
    
    +0

    感謝您的幫助 - 我同意示例代碼不好,只是爲了讓它工作。感謝您的幫助和評論! :) – Jon 2012-04-05 13:00:51

    +0

    執行Wix自定義操作時,鏈接器會出現以下錯誤: ICE77:SetIISAuth是腳本中的自定義操作。它必須在InstallInitialize操作和InstallExecuteSequence表中的InstallFinalize操作之間進行排序。 – ostati 2014-04-08 19:57:56

    +1

    在我的示例中,自定義操作安排在InstallInitialize和InstallFinalize之間。 – 2014-04-08 20:11:22

    相關問題