Dot-Net

將參數從引導程序傳遞到 msi 捆綁包

  • May 8, 2012

我正在使用 VS2010 和 WiX 3.6 創建 MSI 包並將它們捆綁到 Bootstrapper 設置中。這是我的 Boostrapper 程式碼。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
   <Bundle Name="" Version="" Manufacturer="" UpgradeCode="">
       <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

       <Chain>
             <MsiPackage SourceFile="Package1.msi">
               <MsiProperty Name="PARAM1" Value="[PARAM1]" />
               <MsiProperty Name="PARAM2" Value="[PARAM2]" />
             </MsiPackage>
             <MsiPackage SourceFile="Package2.msi">
               <MsiProperty Name="PARAM1" Value="[PARAM1]" />
               <MsiProperty Name="PARAM2" Value="[PARAM2]" />
             </MsiPackage>
       </Chain>
   </Bundle>
</Wix>

MSI 包必須具有指定的參數才能執行。通常,我會打電話給"Packag21.msi PARAM1=1 PARAM2=2". 建構項目後,我嘗試以相同的方式將參數傳遞給我的 Bootstrapper.exe Bootstrapper.exe PARAM1=1 PARAM2=2,但似乎沒有將它們傳遞給 MSI。安裝因缺少參數情況而掛起。

有沒有辦法將參數從exe傳遞到msi?

這目前在標準引導程序中不可用:WixStdBa 不提供命令行屬性 - ID:3489809

如果您創建自己的引導程序應用程序,則可以實現此類功能。

編輯:雖然您不能通過命令行將參數傳遞給引導程序,但您仍然可以通過各種方式在引導程序中收集資訊:

例如:設置變數

<Variable Name="PARAM1" Value="SomeValue" Persisted="yes" Type="string" />

例如:搜尋系統資料庫

<util:RegistrySearch Root="HKLM" Key="Software\SomeProduct" Value="SomeKey" Variable="PARAM1" Result="value"/>

這現在已經實現,並且在 5 月 21 日的 Wix 3.6 RC 版本中可用。

以下是其工作原理的總體構想:

<Wix>
<Bundle>
   <Variable Name="CommandLineArg" bal:Overridable="yes"/>
   <Chain>
     <MsiPackage>
       <MsiProperty Name="CommandLineArg" Value="[CommandLineArg]"/>
     </MsiPackage>
   </Chain>
</Bundle>
</Wix>

您必須創建一個可在命令行覆蓋的捆綁變數,然後將該變數傳遞給您的 msi。

引用自:https://stackoverflow.com/questions/10501995