我试图将一些文件添加到使用RegistrySearch找到的目录中。我相信我的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,但是我的问题是将Directory元素设置为具有RegistrySearch结果的目录。
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="IISROOT" Name/SourceName/FileSource="?"/>
<!-- ... -->
</Directory>
从我所读的内容中,仅在目录不存在且其他源属性已弃用的情况下,才应使用Name,因此(据我所知),我需要使用SourceName
或FileSource
。我已经尝试了两种方法,IISROOT
都使用了方括号和不使用方括号进行了引用,并更改了属性和目录名称以查看它们是否相同或不同,但是结果始终是在中创建文件C:
。我也尝试使用Name="."
,但这并没有改变任何东西。日志总是只说IISROOT
Directory元素设置为C:\
,但是不说我的属性设置是否正确(通过检查RegEdit,我认为它是正确的,但我不能百分百确定)。
我曾问过类似的问题,但答复通常是我当前拥有的实现。我该怎么做才能将Directory元素设置为结果RegistrySearch
?
您应该指定一个默认目录,通常在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目录(即使在其他文件中):
<Fragment>
<ComponentGroup Id="ProductComponents">
<Component Id="Component_User" Guid="*" Directory="IISROOT">
<File Name="My Test App.exe" />
</Component>
</ComponentGroup>
</Fragment>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句