从RegistrySearch的结果设置目录



我正试图将一些文件添加到我使用RegistrySearch找到的目录中。我相信我的RegistrySearch是正确的:

<Property Id="IISROOT">
    <RegistrySearch Id="IIS_RegDir"
                    Type="directory"
                    Root="HKLM"
                    Key="SoftwareMicrosoftInetStp"
                    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,但我的问题是设置一个目录元素有RegistrySearch结果的目录。

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

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

我见过类似的问题,但回答通常是我目前拥有的实现。如何将我的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>

相关内容

  • 没有找到相关文章

最新更新