Я пытаюсь решить мою проблему с помощью автоматической настройки GUID для нескольких компонентов в одной папке, установленной в AppData (установка для каждого пользователя) .
До редактирования у меня был один компонент с 3 файлами.Тогда я решил использовать автоматический GUID для этого компонента, поэтому я разделил его на 3 компонента (каждый с одним файлом).Я думал, что теперь я могу использовать Component GUID with *
и registry value with KeyPath=yes
, но это не работает.Любой совет очень ценится.
Вот фрагмент кода:
<Directory Id='INSTALLDIR' Name='$(var.myInstallDir)'>
<Component Id='MainExecutable' Guid='I_WOULD_LIKE_ASTERISK_HERE_ALSO_BUT_HAVE_HARD_CODED_GUID' >
<RemoveFolder Id='RemoveINSTALLDIR' Directory='INSTALLDIR' On='uninstall' />
<util:RemoveFolderEx On="uninstall" Property="APPLICATIONFOLDER" />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Name='Path' Value='[INSTALLDIR]' KeyPath='yes'/>
<File Id='ffile1' Name='file1' DiskId='1' Source='file1'> </File>
<Shortcut Id="startmenujfile" Directory="ProgramMenuDir" Name='$(var.myAppName)'
Target="[SystemFolder]cmd.exe" Arguments=" /c START javaw.exe -jar [INSTALLDIR]file1.jar ."
WorkingDirectory="INSTALLDIR"
Icon="apsoiconmultiico" IconIndex="0" />
<Shortcut Id="desktopjfile" Directory="DesktopFolder" Name='$(var.myAppName)'
Target="[INSTALLDIR]file1.jar" Arguments=" ."
WorkingDirectory="INSTALLDIR"
Icon="iconmultiico" IconIndex="0" />
</Component>
<Component Id='MainExecutable2' >
<File Id='ffile2' Name='file2' DiskId='1' Source='file2' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes'/>
</Component>
<Component Id='MainExecutable3' >
<File Id='ffile3' Name='file3' DiskId='1' Source='file3' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes'/>
</Component>
</Directory>
И ошибка для компонентов:
error CNDL0230 : The Component/@Guid attribute's value '*' is not valid for this component because it does not meet the criteria for having an automatically generated guid. Components with registry keypaths and files cannot use an automatically generated guid. Create multiple components, each with one file and/or one registry value keypath, to use automatically generated guids.
Спасибо
РЕДАКТИРОВАТЬ:
Благодаря ответ @Stein Åsmul.Мне нужно еще раз спросить ..
Я пытаюсь решить эту проблему, потому что мы переходим от Java Web Start (jnlp) к очень простому MSI-файлу, который устанавливает только элементарные файлы и ярлыки.Тогда само приложение имеет систему автоматического обновления, которая загружает все остальные файлы.
Наше приложение может иметь «множество наборов версий», установленных на одном компьютере (например, набор A: «демонстрация приложения 1, тест приложения 2» и набор B: «демонстрация приложения 2, тест приложения 2»).Каждый набор и каждая версия в наборе могут иметь разные файлы (это работа для самой системы обновления).
Теперь вопрос.Я новичок в установке .msi, поэтому я не уверен в отношении многих шагов.Я знаю идентификатор продукта, код обновления ... но как насчет GUID компонента (в моем случае Component Id='MainExecutable'
) в среде с несколькими наборами приложений, установленных на одном компьютере (для пользователя, но в другом каталоге - AppData / local / setA и AppData / local / setB) с реестром KeyPath = да?Может ли этот компонент иметь фиксированный GUID для всех наших установок, если productId отличается (так жестко закодировано в .wxs для всех установок)?Спасибо за объяснение.