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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Xml 根据RegistrySearch的结果设置目录_Xml_Wix_Windows Installer - Fatal编程技术网

Xml 根据RegistrySearch的结果设置目录

Xml 根据RegistrySearch的结果设置目录,xml,wix,windows-installer,Xml,Wix,Windows Installer,我正在尝试将一些文件添加到通过RegistrySearch找到的目录中。我相信我的注册表搜索是正确的: <Property Id="IISROOT"> <RegistrySearch Id="IIS_RegDir" Type="directory" Root="HKLM" Key="Software\Microsoft\InetStp"

我正在尝试将一些文件添加到通过RegistrySearch找到的目录中。我相信我的注册表搜索是正确的:

<Property Id="IISROOT">
    <RegistrySearch Id="IIS_RegDir"
                    Type="directory"
                    Root="HKLM"
                    Key="Software\Microsoft\InetStp"
                    Name="PathWWWRoot" />
</Property>

我想使用IISROOT属性作为对应该添加文件的目录的引用

<DirectoryRef Id="IISROOT">
    <Component Id="cmp_testBAT" Guid="">
      <File Id="fil_testBAT" KeyPath="yes" Source="$(var.myDir)\test.bat" />
    </Component>
</DirectoryRef>

我知道这是行不通的,因为如果我想使用DirectoryRef,我需要一个目录,但我的问题是设置一个Directory元素以获得RegistrySearch结果的目录

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="IISROOT" Name/SourceName/FileSource="?"/>
   <!-- ... -->
</Directory>

从我所读到的内容来看,如果目录不存在,并且其他源属性已被弃用,我应该只使用Name,因此(据我所知),我需要使用
SourceName
FileSource
。我尝试了这两种方法,引用了
IISROOT
,包括方括号和不包括方括号,并更改了属性和目录名,以查看它们是否相同或不同,但结果总是在
C:
中创建文件。我也尝试过使用
Name=“.”
,但这并没有改变任何事情。日志总是说
IISROOT
目录元素设置为
C:\
,但没有说我的属性设置是否正确(通过检查RegEdit,我认为它是正确的,但我不能100%确定)


我看到过类似的问题,但回答通常是我目前的实现。如何将我的目录元素设置为注册表搜索的结果?

您应该指定一个默认目录,通常在
ProgramFilesFolder
下作为备用目录,以防注册表搜索不返回值。因为当注册表搜索工作时,它通常会覆盖它。这样:

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="MyApp">
                <Directory Id="IISROOT" Name="IISFOLDER" />
            </Directory>
        </Directory>
    </Directory>
</Fragment>

然后可以这样使用IISROOT目录(即使在不同的文件中):



这是在安装文件夹中创建一个名为IISFOLDER的文件夹。这是不是表明我的RegistrySearch没有返回我想要的结果?是的,你是对的,我使用Name=“pathwwroota”对它进行了测试,它创建了IISROOT.)一个建议:您可以添加一个条件来验证是否设置了该值。如果没有,则引发错误并阻止安装您的应用。抱歉,但很难说注册表搜索失败的原因。调试它的一种方法是将结果输出到自定义对话框中的文本控件。感谢您的建议(我从未想到过使用自定义对话框进行调试)。能够看到我的财产价值真是太好了,即使这样做的唯一方式让人觉得不可思议的迂回。
<Fragment>
    <ComponentGroup Id="ProductComponents">
        <Component Id="Component_User" Guid="*" Directory="IISROOT">
            <File Name="My Test App.exe" />
        </Component>
    </ComponentGroup>
</Fragment>