如果存在注册表项,则Wix有条件地安装组件

Bur*_*urt 2 installer wix

我有一个组件,我需要安装只有存在注册表项,这意味着已经安装了一个应用程序.

我需要将注册表项的值(它是一个目录)分配给属性,然后使用此属性从中复制文件.

到目前为止,我有以下脚本,但出现错误"系统无法找到文件'[MYTESTDIR] fileToCopy.dat'."

真的很感激任何帮助.

<Property Id="MYTESTDIR">
    <RegistrySearch Id="NetFramework20"
            Root="HKLM"
            Key="SOFTWARE\TEST\VALUE\1.00"
            Name="MyName"
            Type="directory" />
</Property>

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
        <Directory Id="TEST" Name="Test">       
            <Component Id="MyComponent" Guid="E5FF53DE-1739-42c4-BE37-60F810C9CD69">
              <Condition>MYTESTDIR</Condition>
              <File Id="fileToCopy.dat" Name="fileToCopy.dat" Source="[MYTESTDIR]fileToCopy.dat">
                  <CopyFile Id="fileToCopy.datCopy" DestinationProperty="WEBSERVICEBINFOLDER" />
              </File>

        </Directory>            
    </Directory>
</Directory>

<Feature Id="MyFeature" Title="MyFeature" Level="1">
    <ComponentRef Id="MyComponent" />
</Feature>
Run Code Online (Sandbox Code Playgroud)

Bry*_*der 5

根据我对Wix Schema文档的阅读,您的问题是您将CopyFile元素嵌套在File元素下.抛弃File元素,只需让CopyFile位于Component下:

<Component Id="MyComponent" Guid="E5FF53DE-1739-42c4-BE37-60F810C9CD69"> 
  <Condition>MYTESTDIR</Condition> 
  <CopyFile Id="fileToCopy.datCopy" SourceName="[MYTESTDIR]fileToCopy.dat" DestinationProperty="WEBSERVICEBINFOLDER" />
</Component>
Run Code Online (Sandbox Code Playgroud)

你拥有它的方式,嵌套在File下,Wix在构建期间在你的系统上寻找文件 - 而不是设置一个在安装时运行的复制命令.