Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Wix安装程序中定义私有属性_Wix_Windows Installer - Fatal编程技术网

在Wix安装程序中定义私有属性

在Wix安装程序中定义私有属性,wix,windows-installer,Wix,Windows Installer,首先,让我来定义我所说的私有财产的含义。通常,可以使用脚本设置属性,如下所示: <Property Id="CHECKREGISTRY"> <RegistrySearch Id="CheckRegistryKey" Root="HKLM" Key="SOFTWARE\Foo" Name="Bar"

首先,让我来定义我所说的私有财产的含义。通常,可以使用脚本设置属性,如下所示:

<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>
这与第一个想法背道而驰,即您应该拥有注册表项,以便能够做您想做的事情

如您所见,私有属性(如果存在)将阻止这种情况,并允许仅从MSI安装程序本身中进行设置


我本来想转到
CustomAction
路线,但对于一件非常简单的事情来说,它太复杂了。这个问题有没有简单的解决方案,或者我们如何首先定义私有属性?

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


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

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

但是,不能使用
AppSearch
设置私有属性


请记住,MSI数据库可以检查,因此没有真正的安全性。您最好使用自定义操作进行模糊处理。

谢谢。至少,这将防止它们成为其他脚本和安装程序的一部分。我很高兴我们有这个选择。谢谢!现在的问题是:“错误CNDL0012:Property/@Id属性的值‘checkRegistry’不能包含小写字符。因为这是一个搜索属性,所以它也必须是一个公共属性。这意味着Property/@Id值必须完全为大写。(32)”正确
但是,您不能使用AppSearch设置私有属性。
我不知道您说的AppSearch是指RegistrySearch。我对MSI安装程序还比较陌生。谢谢。
AppSearch
是所有MSI搜索的标准操作。感谢分享您的源代码+1.
msiexec.exe /i FooInstaller.msi /quiet CHECKREGISTRY="#1"