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