.net 我怎样才能避开这个恼人的WiX问题?

.net 我怎样才能避开这个恼人的WiX问题?,.net,windows,wix,installation,windows-installer,.net,Windows,Wix,Installation,Windows Installer,WiX在抱怨(可能性有多大,对吧?) 错误95组件“blahblah”具有路径为的密钥文件 'TARGETDIR\blah.dll'。因为这条路径不是根植于 标准目录(如ProgramFilesFolder),此组件 不符合自动生成guid的条件。 (如果路径包含可能的标准,也可能发生此错误。) 目录,例如将名为“Common Files”的目录嵌套在 程序文件文件夹。) 但是我想要一个自动生成的GUID,我不想将TARGETDIR设置为由ProgramFilesFolder组成的其他路径,因为

WiX在抱怨(可能性有多大,对吧?)

错误95组件“blahblah”具有路径为的密钥文件 'TARGETDIR\blah.dll'。因为这条路径不是根植于 标准目录(如ProgramFilesFolder),此组件 不符合自动生成guid的条件。 (如果路径包含可能的标准,也可能发生此错误。) 目录,例如将名为“Common Files”的目录嵌套在 程序文件文件夹。)


但是我想要一个自动生成的GUID,我不想将TARGETDIR设置为由ProgramFilesFolder组成的其他路径,因为我正在UI中设置TARGETDIR,我甚至允许用户更改它,以便人们可以指定他们想要安装应用程序的路径……人们是如何获得此功能的?可能吗?我是说,我能不能两全其美?为什么这么重要?WiX有时限制太多了…

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

我之前正在修改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>

...
...

您只需设置目录/@ComponentGuidGenerationSeed,然后就可以对非标准文件夹使用自动GUID。

WiX没有抱怨,Windows Installer在抱怨。这是一件大事,因为底层的Windows安装程序有一种叫做组件规则的东西。坏事情发生在你打破它们的时候。然后不要使用MSI。我理解你的沮丧。。。当我第一次学习MSI时,我花了很多时间和它战斗。这是一个非常僵硬的框架,不喜欢你在线条外着色。但一旦你掌握了它,开发者的生产力和用户体验的质量就会有巨大的净收益。不幸的是,这是人们已经掌握的一个标准,否则我不会使用它:)顺便说一句,我说错了。这就是WiX的抱怨。我误读了这条消息。@ChristopherPaint不管怎样,谁在抱怨都无关紧要,重要的是这一切都有一个解决方案。我希望您意识到,您的自定义操作在静默安装期间不会触发。需要更多的逻辑来处理静默安装、维修和升级。@ChristopherPaint是的,我知道。实际上,在我按照我的方式设置文件夹结构之后,我不需要再使用这些操作了。你可以看到这是最初的问题。但是,除此之外:对于静默安装,MSI包导出公共属性,您可以使用msiexec参数末尾的PROPERTY=value语法进行设置。不管怎样,我把它作为练习/POC留在了答案中,这样其他人就可以从中受益,这应该是公认的答案。我现在在我的目录层次结构的顶部文件夹中设置它。