2
我正在爲要安裝的包編寫WXS文件。爲了簡單起見,假設我想安裝1個文件,然後我想對它執行一個命令(在我的情況下,它是一個公共GPG密鑰,我想在安裝完成後導入它)。這裏是我的WXS文件的相關部分:在WIX中執行自定義操作時未安裝文件
<CustomAction Id="ImportKey" Directory="INSTALLDIR"
ExeCommand="[SystemFolder]cmd.exe /C gpg --import keyfile.key"
Return="check" />
<!-- Install file keyfile.key into C:\GnuPG -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR" Name="GnuPG">
<Component Id="GnuPGConfiguration" Guid="E9469F1C-A875-1014-A3B3-DEF3264B13C4">
<File Name="keyfile.key" Id="KeyfileKey" />
</Component>
</Directory>
</Directory>
<Feature Id="GnuPGConfiguration" Level="1" Title="GnuPG Configuration">
<ComponentRef Id="GnuPGConfiguration" />
</Feature>
<!-- Run custom action after files are installed -->
<InstallExecuteSequence>
<Custom Action="ImportKey" After="InstallFiles">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>
我可以成功構建MSI。安裝時,我使用msiexec並打開日誌記錄。在那裏,它表示自定義操作的安裝失敗,並且在日誌中找到了正確的命令。手動運行它的作品。如果我註釋掉該命令的執行,則該文件將安裝在正確的位置(安裝後存在C:\ GnuPG \ keyfile.key)。
而不是運行我的GPG命令,我試圖運行dir ant將其輸出重定向到一個文件。查看它,我可以看到keyfile.key不在C:\ GnuPG中的文件中。看起來該命令在文件安裝之前運行。
關於我在做什麼的錯誤?
這解釋了一切。謝謝。 – Sevas 2010-09-27 13:40:19
如果你有時間,鏈接很好閱讀。否則,不準確但足夠好的TL; DR是「Windows安裝程序在所有階段中運行兩次,第一次構建要安裝的內容和要運行的腳本;第二階段它實際執行操作(例如安裝文件) 。未延遲的操作在第一階段運行,不能依賴於任何已安裝的文件。「 – Pace 2017-06-27 21:10:17
讓我把它添加到你的列表::) http://blog.iswix.com/2010/09/read-windows-installer-sdk.html – 2017-06-28 18:09:13