Меню "Пуск" с подпапкой

80
6

Я использую WiX и хочу создать ярлык в меню запуска пользователя, например


Пуск → [CompanyName] → [ProgramName] → App.exe


Я могу сделать как


Пуск → [Имя_программы] → App.exe


без проблем:


      <Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuDir" Name="RoverSoft Test">
</Directory>
</Directory>
</Directory>

<DirectoryRef Id="ProgramMenuDir">
<Component Id="ProgramMenuDirComponent" Guid="{A9858D4C-085A-4132-AD2E-F90A1E5C64A6}">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
</Component>
</DirectoryRef>


Но если я добавлю еще один уровень папок, я получу ошибку:
Ошибка 1 ICE64: Каталог ProgramMenuSubDir находится в профиле пользователя, но не указан в таблице RemoveFile.


как я понимаю, это означает, что я должен полностью очистить после удаления системы (из реестра в этом случае). Как это сделать?

спросил(а) 2013-04-18T22:30:00+04:00 7 лет, 5 месяцев назад
1
Решение
89

Для каждой папки в профиле пользователя вы хотите, чтобы папка была удалена. Итак, вы можете настроить свой пример следующим образом:


<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuCompanyDir" Name="Company Name">
<Directory Id="ProgramMenuProgramDir" Name="ProgramName"/>
</Directory>
</Directory>
</Directory>

<Component Id="ProgramMenuCompanyDirComponent" Directory='ProgramMenuCompanyDir'>
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name='InstallVersion'
Value="[ProductVersion]" Type="string" />
<RemoveFolder Id="RemoveProgramMenuCompanyDir" On="uninstall" />
</Component>

<Component Id="ProgramMenuProgramDirComponent" Directory='ProgramMenuProgramDir'>
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name='InstallFolder'
Value='[INSTALLFOLDER]' Type="string" />
<RemoveFolder Id="RemoveProgramMenuProgramDir" On="uninstall" />
</Component>

Это гарантирует, что все папки для каждого пользователя имеют пути доступа каждого пользователя (ключи реестра) и будут правильно отмечены для удаления во время удаления.

ответил(а) 2013-04-19T00:42:00+04:00 7 лет, 5 месяцев назад
41

вот мой код.


<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="company" Name="company">
<Directory Id="INSTALLFOLDER" Name="prod" >
<Directory Id="INCLUDEDIR" Name="include">
<Directory Id="THIRDPARTYDIR" Name="3rdParty">
<Directory Id="BIN" Name="bin"></Directory>

</Directory>
</Directory>
</Directory>
</Directory>
</Directory>

<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="prod">
<Component Id="ProgramMenuDir" Guid="0118D11A-0CA3-4E04-8D27-0B73A279A7FD">
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
</Component>

</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
</Fragment>

ярлыки будут такими:


    <DirectoryRef Id="INSTALLFOLDER">
<Component Id="comp_bin_debug_30" Guid="EB4650EB-75DC-4562-9DC3-8FFDD9B55468">
<File Id="file_bin_30" Source="..\bin\Debug.amd64\prod.exe" KeyPath="yes" DiskId="1" />
<Shortcut Id="desktopProd" Directory="DesktopFolder" Name="prod"
WorkingDirectory='INSTALLFOLDER' Icon="prod_GUI.ico" IconIndex="0" Advertise="yes" />
<Shortcut Id="startmenuProd" Directory="ProgramMenuDir" Name="prod"
WorkingDirectory='INSTALLFOLDER' Icon="prod_GUI.ico" IconIndex="0" Advertise="yes" />
</Component>
</DirectoryRef>

ответил(а) 2013-04-18T23:32:00+04:00 7 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема