我怎样才能解决这个烦人的WiX问题?

时间:2014-09-24 14:18:00

标签: .net windows wix installer windows-installer

WiX抱怨(赔率是多少,对吗?):

  

错误95组件' blahblah'有一个带路径的密钥文件   ' TARGETDIR \ blah.dll&#39 ;.由于这条路径没有植根于其中一条   标准目录(如ProgramFilesFolder),这个组件可以   不符合自动生成guid的标准。   (如果路径包含可能的标准,也可能发生此错误   目录,例如嵌套一个名称为" Common Files"的目录。下   ProgramFilesFolder。)

但是我想要一个自动生成的GUID,我想要将TARGETDIR设置为由ProgramFilesFolder组成的其他路径,因为我在UI中设置了TARGETDIR,我甚至允许用户更改它这样人们可以指定他们想要安装应用程序的路径...有人如何获得此功能?可能吗?我的意思是,我能否拥有两全其美的优势?为什么这么重要? WiX有时过于严格......

2 个答案:

答案 0 :(得分:6)

您需要做的就是设置Directory / @ ComponentGuidGenerationSeed,然后您可以将自动guids用于非标准文件夹。

答案 1 :(得分:-1)

我刚刚得到它......有点烦人,但工作正常......

我正在修改TARGETDIR并在之前使用它...但现在,我意识到我可以轻松地使用INSTALLDIR ...例如,我重新考虑了我的目录结构:

<Directory Id='TARGETDIR' Name='SourceDir'>
  ...
  <Directory Id="ProgramFilesFolder">
    <Directory Id="blahFolder" Name="blah">
      <Directory Id="INSTALLFOLDER" Name="blah"/>
    </Directory>
  </Directory>
</Directory>

我可以获取引用INSTALLFOLDER的组件,它会为它们自动生成GUID:

<ComponentGroup Id='blahgroup'>
    <Component Id='blahId' Directory='INSTALLFOLDER' Transitive='no'>
      <RegistryKey Root='HKLM' Key='Software\blah\blah' ForceCreateOnInstall='no' ForceDeleteOnUninstall='no'>
        <RegistryValue Type='string' Name='blah' Value='BLAH' />
      </RegistryKey>
    </Component>
    ...
</ComponentGroup>

但是在我的UI中,它很好,因为我可以很好地修改安装文件夹路径:

<Product ...>
  ...
  <CustomAction Id='SetInstallFolder' Property='INSTALLFOLDER' Value='[ProgramFilesFolder]blah\blah\'/>
  ...
</Product>

然后我可以强制INSTALLFOLDER指向我想要的任何地方:

<InstallUISequence>
  <Custom Action='SetInstallFolder' Sequence='1'/>
  ...
</InstallUISequence>
<AdminUISequence>
  <Custom Action='SetInstallFolder' Sequence='1'/>
  ...
</AdminUISequence>