如何解决这个烦人的WiX问题?

Ale*_*dru 7 .net windows installer windows-installer wix

WiX抱怨(赔率对吗?):

错误95组件'blahblah'的密钥文件的路径为'TARGETDIR \ blah.dll'。由于此路径未植于标准目录之一(例如ProgramFilesFolder)中,因此该组件不适合具有自动生成的guid的条件。(如果路径包含可能的标准目录,例如在ProgramFilesFolder下嵌套名称为“ Common Files”的目录,也会发生此错误。)

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

Nei*_*eil 8

您所需要做的就是设置Directory / @ ComponentGuidGenerationSeed,然后可以对非标准文件夹使用自动导航。

  • @lewis 示例: <Directory Id="TARGETDIR" Name="SourceDir" ComponentGuidGenerationSeed="CC245F45-2B96-45DC-9667-A83A75C5D1FE"> (4认同)

Ale*_*dru -1

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

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

<Directory Id='TARGETDIR' Name='SourceDir'>
  ...
  <Directory Id="ProgramFilesFolder">
    <Directory Id="blahFolder" Name="blah">
      <Directory Id="INSTALLFOLDER" Name="blah"/>
    </Directory>
  </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

我可以让组件引用 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>
Run Code Online (Sandbox Code Playgroud)

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

<Product ...>
  ...
  <CustomAction Id='SetInstallFolder' Property='INSTALLFOLDER' Value='[ProgramFilesFolder]blah\blah\'/>
  ...
</Product>
Run Code Online (Sandbox Code Playgroud)

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

<InstallUISequence>
  <Custom Action='SetInstallFolder' Sequence='1'/>
  ...
</InstallUISequence>
<AdminUISequence>
  <Custom Action='SetInstallFolder' Sequence='1'/>
  ...
</AdminUISequence>
Run Code Online (Sandbox Code Playgroud)