2016-09-10 100 views
0

我正在使用WiX 3.10進行安裝。我的初始任務是將Postgres文件複製到目標系統,初始化羣集,註冊服務,啓動它並在安裝時恢復數據庫,並在反向停止服務中將其從系統中刪除,並清除羣集數據。我寫了兩個bat文件,並添加了自定義操作來執行它們以及在各個地方描述的一些條件,但是它們都不起作用。我嘗試了使用和不使用CDATA,已安裝,已安裝和其他一些變體,但它始終執行這兩個操作。僅在安裝或卸載時執行自定義操作

這是我現在正在試驗的wix文件。

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="Hatred_6" Language="1033" Version="1.0.0.0" Manufacturer="Satan" UpgradeCode="d9602b10-8428-4031-8c82-99288b21377f"> 
     <Package InstallerVersion="405" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"/> 

     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <MediaTemplate EmbedCab="yes" /> 

     <CustomAction Id="AAction" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" Return="check" 
         ExeCommand="cmd.exe /c &quot;a.bat&quot;">NOT Installed</CustomAction> 

     <CustomAction Id="BAction" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" Return="check" 
         ExeCommand="cmd.exe /c &quot;b.bat&quot;">Installed</CustomAction> 

     <InstallExecuteSequence> 
      <Custom Action="BAction" After="InstallFiles" /> 
      <Custom Action="AAction" After="InstallFiles" /> 
     </InstallExecuteSequence> 

     <Feature Id="ProductFeature" Title="Hatred_6" Level="1"> 
      <ComponentGroupRef Id="ProductComponents" /> 
     </Feature> 
    </Product> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLFOLDER" Name="Hatred_6" /> 
      </Directory> 
     </Directory> 
    </Fragment> 

    <Fragment> 
     <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
      <Component Id="CalcComponent" Guid="515C0606-FD73-4B5D-ACF4-481123092A3E"> 
       <File Id="CalcFile" KeyPath="yes" Source="calc.exe" /> 
      </Component> 
      <Component Id="AComponent" Guid="515e3aa0-e5a0-4cd1-aaa5-ebf25a679a24"> 
       <File Id="AFile" KeyPath="yes" Source="a.bat" /> 
      </Component> 
      <Component Id="BComponent" Guid="85f7627e-fc39-4f78-a870-221d2d08375d"> 
       <File Id="BFile" KeyPath="yes" Source="b.bat" /> 
      </Component> 
     </ComponentGroup> 
    </Fragment> 
</Wix> 

BAT文件包含DIR> A.TXT和dir> b.txt所以我可以看到,如果他們真的執行。 這有點令人沮喪,我誤解了什麼?

+0

我建議使用詳細日誌而不是'dir> a.txt'來確定自定義動作是否執行。 –

+0

無論如何,我需要兩個bat文件產生副作用,並且我沒有找到詳細日誌中的任何內容來解釋如何評估操作條件。 – Encarmine

回答

6

條件應放在Custom元素內,而不是CustomAction。另外,您在卸載過程中沒有InstallFiles操作。改爲使用RemoveFiles

<CustomAction Id="AAction" Directory="INSTALLFOLDER" Execute="deferred" 
       Impersonate="no" Return="check" ExeCommand="cmd.exe /c &quot;a.bat&quot;" /> 
<CustomAction Id="BAction" Directory="INSTALLFOLDER" Execute="deferred" 
       Impersonate="no" Return="check" ExeCommand="cmd.exe /c &quot;b.bat&quot;" /> 

<InstallExecuteSequence> 
    <Custom Action="AAction" After="InstallFiles">NOT Installed</Custom> 
    <Custom Action="BAction" Before="RemoveFiles">Installed</Custom> 
</InstallExecuteSequence> 
+0

這些情況在升級過程中仍會運行。 「已安裝」是指正在安裝的{Product GUID}產品。通過重大升級,產品GUID不同,但升級GUID匹配,因此我們知道哪些產品是升級產品。我會將這兩個條件修改爲'NOT WIX_UPGRADE_DETECTED AND NOT Installed']和'NOT UPGRADINGPRODUCTCODE AND REMOVE〜=「ALL」'以使這些操作僅在首次安裝時運行**並完成卸載。 –

+0

@BrianSutherland,你是對的,但經驗表明,在重大升級期間應該停止服務,所以對於作者而言,原始條件更好。 –

+0

@SutarminAnton我犯的錯誤有點尷尬,你的建議有幫助。至於確切的條件,我需要 - 有一些好的cheatsheet在其他SO答案像這樣http://stackoverflow.com/questions/320921/how-to-add-a-wix-custom-action-that-happens-only-上卸載,通過微星 – Encarmine

相關問題