2013-07-18 87 views
7

我在Wix 3.7上。我有一個MSI,我想設置一個註冊表項(可能通過自定義操作,因爲他將不得不檢查密鑰是否已經存在)。將命令行參數傳遞給來自WiX bundle的MSI

我知道引導程序項目中的Bundle無法更改機器狀態(例如設置註冊表)。因此,我試圖通過<MsiProperty>傳遞一個命令行參數,但似乎並未顯示爲我的日誌文件中的引導程序的命令行參數。

  1. 是否可以在一個Bundle中設置註冊表項?
  2. 如果不是,我如何添加命令行參數(或其他一些自定義數據) 傳遞給MSI。
  3. MSI如何讀取我傳遞給它的任何信息(無論它是否是命令行參數或其他東西 )。

軟件包:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Bundle 
      Name="MyInstallerBootstrapperLocalDb" 
      Version="1.0.0.0" 
      Manufacturer="some company" 
      UpgradeCode="PUT-GUID-HERE"> 
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 
    <Chain> 
     <MsiPackage Id="MyInstallerInstaller" 
        SourceFile="$(var.MyInstallerInstaller.TargetPath)" 
        Compressed="no"> 
     <!-- TODO - if this is being set correctly, the MSI needs to 
        interpret it and set up the key--> 
     <MsiProperty Name="SetLocalDb" Value="yes"/> 
     </MsiPackage> 
    </Chain> 
    </Bundle> 
</Wix> 
+1

MSI命令行上的屬性需要是PUBLIC屬性。公共財產就是資本。所以,它需要是SETLOCALDB,而不是SetLocalDb。並且需要在MSI中作爲所有首都進行宣佈。 – RobG

回答

9

你MSI需要定義一個屬性,像這樣:

<MsiPackage SourceFile="<package>.msi" Id="SomeId"> 
    <MsiProperty Name="SOMEPROPERTY" Value="[SomeProperty]" /> 
</MsiPackage> 

後:

<Property Id="SOMEPROPERTY" Value="Default"/> 

然後,您可以從包設置該屬性這可以在Bootstrapper中設置屬性,如下所述: WiX Bootstrapper: How do I set burn variables from the command line?

注意SomeProperty是,你必須定義一個燒傷變量:

<Variable Name="SomeProperty" Type="string" Value="DefaultValue" /> 

更新:

在MSI你就能夠基於此屬性做一個註冊表搜索:

<RegistrySearch Id="GetSomeValue" Root="HKLM" Key="SOFTWARE\<Manufacturer>\[SOMEPROPERTY]" Name="<ValueName>" Type="raw" /> 
+0

這工作。我認爲主要的問題是我的bundle項目做了一個GenerateBootstrapper,它實際上使它成爲一個非wix setup.exe,並且忽略了我在我的包中定義的任何東西。 –