2017-07-26 8 views
1

Lassen Sie mich zuerst definieren, was ich meine, indem ich Privateigentum sage. Normalerweise können Eigenschaften, wie mit Hilfe von Skripten wie folgt eingestellt werden:Definieren von privaten Eigenschaften in Wix Installer

<Property Id="CHECKREGISTRY"> 
     <RegistrySearch Id="CheckRegistryKey" 
         Root="HKLM" 
         Key="SOFTWARE\Foo" 
         Name="Bar" 
         Type="raw" /> 
</Property> 
<Condition Message="You don't have the required permission to install this tool."> 
    <![CDATA[Installed OR CHECKREGISTRY]]> 
</Condition> 

Aber das Problem ist, dass Sie diese Prüfung einfach durch Ausführen eines Skripts wie folgt umgehen:

msiexec.exe /i FooInstaller.msi /quiet CHECKREGISTRY="#1" 

und das ist gegen die sehr erste Idee, dass Sie den Registrierungsschlüssel haben sollten, um zu tun, was Sie tun möchten.

Wie Sie sehen, würde eine private Eigenschaft - falls vorhanden - dies verhindern und es ermöglichen, nur innerhalb des MSI-Installationsprogramms selbst festlegen zu können.

Ich dachte nach CustomAction Route gehen, aber für eine sehr einfache Sache, es ist übermäßig kompliziert. Gibt es eine einfache Lösung für dieses Problem oder wie können wir private Eigenschaften überhaupt definieren?

Antwort

2

Sie können eine private Eigenschaft erstellen, indem Sie sie mit einem Kleinbuchstaben benennen. Öffentliche Eigenschaften sind ausschließlich in Großbuchstaben angegeben.

Sie können jedoch AppSearch nicht verwenden, um private Eigenschaften festzulegen.

Denken Sie daran, dass MSI-Datenbanken überprüft werden können, so dass es keine echte Sicherheit gibt. Am besten können Sie benutzerdefinierte Aktionen zum Verschleiern verwenden.

+0

Danke. Zumindest wird dadurch verhindert, dass sie Teil anderer Skripte und Installer sind. Ich bin froh, dass wir diese Option haben. Danke vielmals! – Tarik

+0

Das Problem ist jetzt: "Fehler CNDL0012: Der Wert der Eigenschaft/@ Id-Attribut 'checkRegistry' darf keine Kleinbuchstaben enthalten. Da dies eine Sucheigenschaft ist, muss es auch eine öffentliche Eigenschaft sein. Dies bedeutet den Property/@ Id-Wert muss vollständig aus Großbuchstaben bestehen. (32) " – Tarik

+1

Rechts. 'Sie können AppSearch jedoch nicht verwenden, um private Eigenschaften festzulegen. –

2

Per Definition ist eine Eigenschaft, die nur aus Großbuchstaben besteht, öffentlich. Um es privat zu machen, verwenden Sie einige Kleinbuchstaben.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371245(v=vs.85).aspx

Wenn Sie sich Sorgen über eine öffentliche Eigenschaft in der Befehlszeile festgelegt werden, setzen Sie nur explizit auf einen leeren Wert vor AppSearch.

+0

Vielen Dank für die Freigabe Ihrer Quelle. +1 – Tarik

Verwandte Themen