2017-07-26 47 views
1

首先,讓我通過說私有屬性來定義我的意思。在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> 

但問題是,你可以通過簡單地運行這樣的腳本繞過這個檢查:

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

,並且是針對非常正常情況下,屬性還可以使用腳本,例如如下設置第一個想法,你應該有註冊表鍵能夠做你想做的事情。

如您所見,私有財產 - 如果存在 - 將阻止這種情況發生,並允許只能從MSI安裝程序本身進行設置。

我正在考慮去CustomAction的路線,但是對於一個非常簡單的事情來說,它太複雜了。有沒有簡單的解決方案來解決這個問題,或者我們如何能夠首先定義私有屬性?

回答

2

您可以通過用小寫字母命名來創建一個私有屬性。公共屬性全部爲大寫。

但是,您不能使用AppSearch來設置私有屬性。

請記住,MSI數據庫可以檢查,所以沒有真正的安全。最好你可以得到的是使用自定義操作混淆。

+0

謝謝。至少,它會阻止它們成爲其他腳本和安裝程序的一部分。我很高興我們有這個選擇。非常感謝! – Tarik

+0

現在的問題是:「錯誤CNDL0012:Property/@ Id屬性的值'checkRegistry'不能包含小寫字符,因爲這是一個搜索屬性,它也必須是一個公共屬性,這意味着Property/@ Id值必須完全大寫。(32) 「 – Tarik

+1

沒錯。 '但是,你不能使用AppSearch來設置私有屬性。' –