在Wix Installer中定义私有属性

时间:2017-07-26 17:44:06

标签: wix windows-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 个答案:

答案 0 :(得分:2)

根据定义,仅由大写字母组成的属性是公共的。要使其私有使用一些小写字符。

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

如果您担心在命令行中设置公共属性,只需在AppSearch之前将其显式设置为空值。

答案 1 :(得分:2)

您可以通过使用小写字母命名来创建私有属性。公共属性是全大写的。

但是,您无法使用AppSearch设置私有属性。

请记住,可以检查MSI数据库,因此没有真正的安全性。您可以获得的最佳方法是使用自定义操作进行混淆。