首先,让我通过说私有财产来定义我的意思。通常,可以使用以下脚本来设置属性:
<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
路线,但是对于一个非常简单的事情,它过于复杂。有没有这个问题的简单解决方案,或者我们如何首先定义私有属性?
答案 0 :(得分:2)
根据定义,仅由大写字母组成的属性是公共的。要使其私有使用一些小写字符。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa371245(v=vs.85).aspx
如果您担心在命令行中设置公共属性,只需在AppSearch之前将其显式设置为空值。
答案 1 :(得分:2)
您可以通过使用小写字母命名来创建私有属性。公共属性是全大写的。
但是,您无法使用AppSearch
设置私有属性。
请记住,可以检查MSI数据库,因此没有真正的安全性。您可以获得的最佳方法是使用自定义操作进行混淆。