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

Installation 如果注册表项存在,Wix有条件地安装组件,installation,wix,Installation,Wix,我有一个组件,我需要安装只有当注册表项存在,这意味着一个应用程序已经安装 我需要将注册表项(它是一个目录)的值分配给一个属性,然后使用该属性从中复制文件 到目前为止,我有以下脚本,但得到一个错误“系统找不到文件'[MYTESTDIR]fileToCopy.dat' 任何帮助都将不胜感激 <Property Id="MYTESTDIR"> <RegistrySearch Id="NetFramework20" Root="HKLM"

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

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

到目前为止,我有以下脚本,但得到一个错误“系统找不到文件'[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>

MYTESTDIR

根据我对Wix模式文档的阅读,您的问题是该元素嵌套在File元素下。舍弃File元素,将CopyFile放在组件下面:

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

MYTESTDIR

按照您将其嵌套在文件下的方式,Wix在构建期间在您的系统上查找该文件,而不是设置在安装时运行的复制命令。

MYTESTDIR
是windows installer属性,安装包时将在目标系统上获取其值

但是,您正试图在
属性中使用此属性,该属性用于指向正在生成安装程序包的系统上的文件

显然,这是行不通的。在计算
Source
属性时,Windows installer属性甚至不存在,因此
Source
肯定不支持这种使用

布莱恩的答案是正确的解决方案。在
File
元素下使用
CopyFile
并不违法,但它用于复制您也安装的文件。在这种情况下,您希望复制已在目标系统上的文件,因此
file
元素不合适