2013-07-18 15 views
7

Jestem na Wix 3.7. Mam MSI, dla którego chciałbym ustawić klucz rejestru (być może poprzez działanie niestandardowe, ponieważ będzie musiał sprawdzić, czy klucz już istnieje).Przekazywanie argumentów wiersza poleceń do MSI z pakietu WiX

Rozumiem, że pakiet w projekcie bootstrapper nie może zmienić stanu komputera (na przykład ustawienia rejestru). Dlatego próbuję przekazać argument wiersza poleceń przez <MsiProperty>, ale nie pojawia się jako argument linii poleceń w moim pliku dziennika dla bootstrapper.

  1. Czy można ustawić klucz rejestru w pakiecie?
  2. Jeśli nie, w jaki sposób można dodać argument wiersza polecenia (lub inny niestandardowy element danych) do przesłania do MSI.
  3. W jaki sposób MSI może odczytać to, co do niego przekazuję (niezależnie od tego, czy kończy się to na argumencie wiersza poleceń, czy na czymś innym).

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

Właściwość w wierszu komend MSI musi być własnością PUBLICZNA. A własność publiczna to taka, która w stolicach. Musi to być SETLOCALDB, a nie SetLocalDb. I musi być zadeklarowane w MSI, jak również wszystkie kapitele. – RobG

Odpowiedz

9

Twój MSI musi zdefiniować właściwość tak:

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

Następnie można ustawić tę właściwość z pakietu:

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

After to możesz ustawić właściwość w Bootstraperze, jak opisano tutaj: WiX Bootstrapper: How do I set burn variables from the command line?

Uwaga, SomeProperty jest zmienną Tajne której trzeba określić:

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

Aktualizacja:

W MSI jesteś wtedy w stanie zrobić przeszukiwanie rejestru na podstawie tej właściwości:

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

To działa. Myślę, że głównym problemem jest to, że mój projekt pakowania generuje program GenerateBootstrapper, który faktycznie czyni go plikiem innym niż wix setup.exe i ignoruje wszystko, co zdefiniowałem w moim pakiecie. –

Powiązane problemy