2013-07-18 13 views
7

Ich bin auf Wix 3.7. Ich habe ein MSI, das ich einen Registrierungsschlüssel einrichten möchte (vielleicht über eine benutzerdefinierte Aktion, da er prüfen muss, ob der Schlüssel bereits vorhanden ist).Übergabe von Befehlszeilenargumente an MSI von WiX-Bundle

Ich verstehe, dass ein Bundle in einem Bootstrapper-Projekt den Maschinenzustand nicht ändern kann (z. B. das Einrichten der Registrierung). Daher versuche ich, ein Befehlszeilenargument über <MsiProperty> zu übergeben, scheint aber nicht als Befehlszeilenargument in meiner Protokolldatei für den Bootstrapper angezeigt.

  1. Ist es möglich, einen Registrierungsschlüssel in einem Bundle einzurichten?
  2. Wenn nicht, wie kann ich ein Befehlszeilenargument (oder ein anderes Stück benutzerdefinierter Daten) hinzufügen, das an die MSI übergeben werden soll.
  3. Wie kann das MSI lesen, was auch immer ich es übergeben (ob es sich um eine Befehlszeile arg oder etwas sonst).

Bundle:

<?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

Eine Eigenschaft in der MSI-Befehlszeile muss eine PUBLIC-Eigenschaft sein. Und eine öffentliche Eigenschaft ist eine, die alles in den Hauptstädten ist. Also muss es SETLOCALDB sein, nicht SetLocalDb. Und muss im MSI auch als alle Hauptstädte deklariert werden. – RobG

Antwort

9

Ihr MSI wie so eine Eigenschaft definieren muss:

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

Anschließend können Sie diese Eigenschaft aus dem Bündel:

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

Nach Hier können Sie die Eigenschaft im Bootstrapper wie hier beschrieben einstellen: WiX Bootstrapper: How do I set burn variables from the command line?

Beachten Sie, dass SomeProperty ist ein Burn-Variable, die Sie definieren müssen:

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

Update:

Im MSI sind Sie dann in der Lage einen Registrierungs Suche zu tun, basierend auf dieser Eigenschaft:

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

Das funktioniert. Ich denke, das Hauptproblem ist, dass mein Bundle-Projekt einen GenerateBootstrapper ausführt, der es zu einer nicht-wix setup.exe macht und alles ignoriert, was ich in meinem Bundle definiert habe. –

Verwandte Themen