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,我面临着多字符串的注册搜索问题,其中as字符串搜索工作正常。 签入安装日志 操作开始13:40:07:AppSearch。微星(40:E0)[13:40:07:381]: 属性更改:添加MYKEY属性。其值为“”。MSI (40:E0)[13:40:07:381]:属性更改:添加MYSERVICE属性。 其值为“myvalue2” 我在这里修剪了一些原木 行动于13:40:51结束: 计划重新启动。返回值1。操作于13:40:51结束:安装。返回 值1。您必须重新启动系统以进行配置更改 致XXX

我面临着多字符串的注册搜索问题,其中as字符串搜索工作正常。 签入安装日志

操作开始13:40:07:AppSearch。微星(40:E0)[13:40:07:381]: 属性更改:添加MYKEY属性。其值为“”。MSI (40:E0)[13:40:07:381]:属性更改:添加MYSERVICE属性。 其值为“myvalue2”

我在这里修剪了一些原木

行动于13:40:51结束: 计划重新启动。返回值1。操作于13:40:51结束:安装。返回 值1。您必须重新启动系统以进行配置更改 致XXXXX生效。单击“是”立即重新启动,或单击“否”重新启动 计划稍后手动重新启动。属性:升级代码= {XXXXXX-XXXX-XXX-XXXX-XXXXXXXX} 属性:MYKEY=[~]myvalue1[~]属性:MYSERVICE=myvalue2

在安装结束时,它似乎已正确评估MYKEY,但在AppSearch期间未正确评估,导致我的条件评估失败

<Feature Id="MyFeature" Level="" Display="" Title="" Description="" AllowAdvertise="no" ConfigurableDirectory="INSTALLDIR">
   <MergeRef Id="MyFeature" Primary="yes"/>
   <Condition Level="0">((MsiNTProductType=1) OR 
   (MYKEY="[~]MyValue[~]") OR 
   (MYSERVICE="MyService" AND MYKEY=""))</Condition>
   </Condition>
</Feature>
<Property Id="MYKEY" Secure="yes">
        <RegistrySearch Id="MyKey"
                             Root="HKLM"
                             Key="SYSTEM\CurrentControlSet\Services\MyService"
                             Name="mykey"
                             Type="raw" />
</Property>
<Property Id="MYSERVICE" Secure="yes">
        <RegistrySearch Id="MYSERVICE"
                        Root="HKLM"
                             Key="SYSTEM\CurrentControlSet\Services\MyService"
                             Name="DisplayName"
                             Type="raw" />
</Property>

((MsiNTProductType=1)或
(MYKEY=“[~]MyValue[~]”)或
(MYSERVICE=“MYSERVICE”和MYKEY=”“)
更新:我可能已经错过了您的陈述,但是当使用simply PROPERTYNAME作为条件检查AppSearch搜索设置的属性是否有任何赋值时,该条件显示为true-意味着有问题的属性中存在“某物”,文本只是不显示

仅测试是否存在值就足够了,还是需要检查
MYKEY
的特定值?如果仅存在一个值就足够了,则可以使用以下条件:

((MsiNTProductType=1)或(MYKEY)或(MYSERVICE=“MYSERVICE”和MYKEY=”“)


AppSearch不支持多字符串

没有必要怀疑这一点的准确性,因为Rob是原始MSI团队的成员。你需要放弃这种方法。很抱歉。除非我刚才添加的上述解决方法可以工作(不要检查值,但如果从注册表中检索到值)

其他几个潜在的解决办法:

  • 您可以从自定义操作读取多字符串。我刚刚验证了它与测试VBScript(禁止使用的MSI工具:-)一起工作
  • 您能否在磁盘上搜索一个文件或目录,该文件或目录表示您使用此多字符串从注册表中检索到的相同内容

  • 正如我的座右铭所说:让我们沉迷于此(而不是“小心,我们不想从中学习”——这是我的另一个座右铭——往往是更好的选择)

    真奇怪,我可以复制您关于日志文件的声明。我看到一个命令行条目,它正确地显示了multi-sting,尽管有几个额外的空字符(稍微缩短的日志条目):

    此外,在日志文件的后面,在InstallFinalize之后:

    Property(S): MULTISTRING = [~]String 1[~]String 2[~]String 3[~]
    
    我真的不明白这是怎么回事。不知怎的,AppSearch必须确实设置了有问题的属性,即使它看起来不像是这样的-该属性无法正确检索(或格式正确),因此在(功能)条件下也无法工作

    可能Windows Installer中的底层数据模型已将检索到的注册表多字符串值存储为BSTR(COM字符串格式的讨厌之处,该格式允许嵌入空值,并且可以编译和链接-“烧焦的子项,闻起来烧焦了-以及所有这些…”)

    无论如何,我想AppSearch需要一个常规的、以null结尾的字符串缓冲区,并将解释为这样?因此,第一个空值是BSTR的数据字符串部分(不是长度前缀部分-)的第一个字符,并且报告了一个空字符串?日志文件中显示的属性值必须通过其他方式直接从基础数据模型中读取?我假设MSI Win32 C++函数?但是AppSearch的情况不是也一样吗此属性字符串(带有嵌入的null)在条件中的显示和使用方式有问题

    总之:可能多字符串的检索实际上是有效的,但是通过
    Session.Property(“PROP”)
    公开的值错误地将潜在的、原生的BSTR读取为以null结尾的字符串缓冲区,并将前导的null解释为字符串缓冲区的结尾?考虑到
    Session.Property
    是一个COM调用,应该明确理解一个BSTR,这似乎没有什么意义?像这样的理论永远都是不正确的,但也许它们至少可以帮助创造一些新的想法。Windows Installer缺少的一个功能,我觉得有点像一个bug。或者在现实世界中是这样的:一个技术问题,不容易修复,因此被视为缺失的特征并被接受


    让我把你们关于这个问题的问题联系起来,以供参考(以及其他几个答案):


    您可以稍微澄清一下这个问题。你指的是MYPROPERTY1,但其他地方没有提到。您可能引用MYKEY,因为它高亮显示,某个地方的完整日志可能会有所帮助,属性会被引用任意次数,并且它可能位于传递给服务端的命令行中。AppSearch可能在UI和执行序列中,那么部分日志中的序列是什么呢?此外,在没有架构规范的情况下,搜索WoW6432注册表或本机64位可能很重要。我正在64位注册表中搜索,尝试添加标志IS64位,但没有解决问题。谢谢,但我还需要检查MYKEY的值,即多字符串。请让我知道,如果你看到的选项以外的自定义操作?我真的不能
    Property(S): MULTISTRING = [~]String 1[~]String 2[~]String 3[~]