2010-03-02 9 views
9

In meinem WiX Installer habe ich eine Eigenschaft für ein UserID bekam, die auf einen Registrierungsschlüssel geschrieben wird:WiX: Wie kann ich eine Eigenschaft extern festlegen?

<Property Id='UserID' Value='123' /> 

<Directory Id='TARGETDIR' Name='SourceDir'> 
    <Component Id='UserIDComponent' Guid='C7A5A70E-261C-11DF-9FB7-49AC56D89593'> 
     <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='integer' Value='[UserID]' Name='UserID' /> 
    </Component> 

Ich möchte den Wert dieser Eigenschaft auf die Benutzer-ID der Person, das Herunterladen setzen mein Installateur im laufenden Betrieb. Wenn sie also zum Download gehen, erstelle ich einfach eine Kopie der Basis-MSI, die jeder bekommt, und setze den Wert von UserID auf den der Person, die die Datei herunterlädt, und das ist, was sie herunterladen. Es wird das gleiche Installationspaket sein, das jeder erhält, aber mit der Eigenschaft, die für sie festgelegt ist.

Ich kann anscheinend keine Ressourcen finden, wie man eine WiX MSI-Eigenschaft von einer externen Quelle aus setzt. Wie kann ich das machen?

+0

Ich wollte keinen Bootstrap zu schaffen habe, so Am Ende habe ich das Windows SDK installiert und einen Befehl wie hier http://bit.ly/ctGHth ausgeführt, um den Wert in meinem MSI zu ändern. Dies ermöglicht es mir, dem Benutzer eine MSI zu geben, die sie einfach doppelklicken können, ohne sich um die Parameter zu kümmern, der Parameter wird durch den Befehl, den ich geschrieben habe, aktualisiert. Denken Sie daran, dass Sie den richtigen Typ von Hochkommata angeben müssen, den über der Tilde für MSI-Schlüsselwörter und den Apostroph für Literale (wie UserID und '123'). –

Antwort

8

Soweit ich mich erinnere, können Sie tatsächlich Eigenschaften von "außerhalb" setzen - der Name der Eigenschaft muss in allen GROßEN sein, um als öffentliche Eigenschaft erkannt zu werden (frag mich nicht, warum ....) und dann können Sie es wie folgt einstellen:

msiexec /i C:\Example.msi PROPERTY=VALUE 

z in Ihrem Fall

msiexec /i C:\Example.msi USERID=somevalue 

die MSDN docs Befehlszeilenoptionen MSIEXEC Siehe auf der Verwendung von

+1

Das hat funktioniert, es muss nur msiexec/i C: \ Beispiel.msi USERID = somevalue sein. Wenn Sie die Eigenschaft zwischen der Option/i und dem Dateinamen (dem Argument der Option) festlegen, wird sie nicht installiert. Danke für deine Hilfe, das war viel einfacher als ich erwartet hatte. –

1

Ihre Optionen zu sein scheinen: -

(i) Befehlszeilenparameter auf msiexec gemäß der anderen Antwort - zerbrechlich , nicht wirklich eine Option, wenn sie das Herunterladen und Ausführen es

(ii) Versuch, die MSI-Datei hacken die ID einfügen - einen Hack

(iii) Starten von MSBUILD zum Erstellen einer neuen MSI-Datei bei Bedarf auf dem Server, nachdem eine Kopie der WIX-Datei so geändert wurde, dass sie ihre ID enthält (iv) viele MSI-Dateien mit zufälligen IDs (möglicherweise GUIDs) vorgenerieren) in ihnen und verknüpfen Sie diese IDs mit Benutzer-IDs zum Download-Zeitpunkt in Ihrer Datenbank. Stellen Sie nun einen Nachschlagedienst bereit, um die zufällige ID in der MSI-Datei mit der tatsächlichen Benutzer-ID zuzuordnen, damit das Programm bei der Ausführung die Benutzer-ID finden kann (oder über eine benutzerdefinierte Aktion verfügt, die dies ausführt).

(v) erstellen Sie eine benutzerdefinierte Aktion und verwenden MsiGetProperty die Dateinamen des Installationsprogrammes zu bekommen - einfach den Benutzer-ID auf den Namen MSI-Datei anhängen - fragilen Hack

Verwandte Themen