Dot-Net

如何解決“此組件不符合自動生成 guid 的標準”

  • July 1, 2021

WiX 在抱怨(機率是多少,對吧?):

錯誤 95 組件“blahblah”有一個密鑰文件,路徑為“TARGETDIR\blah.dll”。由於此路徑未植根於標準目錄之一(如 ProgramFilesFolder),因此此組件不符合自動生成 guid 的標準。(如果路徑包含可能的標準目錄,例如在 ProgramFilesFolder 下嵌套名稱為“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>

您需要做的就是設置 Directory/@ComponentGuidGenerationSeed,然後您可以對非標准文件夾使用自動 guid。

引用自:https://stackoverflow.com/questions/26019265