Я пытаюсь создать ярлык в меню программных файлов для моего приложения.Однако, поскольку у моей компании может быть несколько продуктов со своими собственными установщиками, я хочу, чтобы они были в подпапках меню, где каждый установщик добавляет ярлыки своих продуктов в это подменю.
Пока я достиг этого, нокогда я удаляю один из них, он оставляет свои артефакты в меню запуска, а если я удаляю все из них, он все равно оставляет папку компании, а также любые неисправные подменю.
Вот часть кода WIX, котораяЯ пытался использовать.Я использую один и тот же код в нескольких установщиках для разных продуктов:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name ="PFiles">
<Directory Id="CompanyFolder" Name="!(loc.ManufacturerName)">
<Directory Id="INSTALLDIR" Name="!(loc.ProductName)"/>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="CompanyProgramsFolder" Name="!(loc.ManufacturerName)">
<Directory Id="ProductFolder" Name="!(loc.ProductName)"/>
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="CompanyProgramsFolder">
<Component Id="CompanyProgramsFolderComponent" Guid="{SOME GUID}" >
<RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
<RemoveFolder Id="CompanyProgramsFolder" On="uninstall"/>
</Component>
</DirectoryRef>
<DirectoryRef Id="ProductFolder">
<Component Id="ApplicationShortcut" Guid="SOME GUID">
<Shortcut Id="ApplicationStartMenuShortcut" Icon="Company.ico" Name="!(loc.ProductName)" Description="!(loc.ApplicationDescription)" Target="[INSTALLDIR]MyApplication.exe" WorkingDirectory="INSTALLDIR"/>
<Shortcut Id="UninstallProduct" Icon="Company.ico" Name="Uninstall !(loc.ProductName)" Description="Uninstalls !(loc.ProductName)"
Target="[SystemFolder]msiexec.exe"
Arguments="/x [ProductCode]"/>
<RemoveFolder Id="ProductFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)\!(loc.ProductName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<!-- Set the components defined in our fragment files that will be used for our feature -->
<Feature Id="MainFeature" Title="!(loc.ProductName)" Description="!(loc.ApplicationDescription)" Level="1">
<ComponentGroupRef Id="Files" />
<ComponentRef Id="CompanyProgramsFolderComponent" />
<ComponentRef Id="ApplicationShortcut" />
</Feature>
Есть ли способ заставить это работать?Меня не устраивает то, какие функции играют здесь значения реестра, поэтому, возможно, я был наивен при их использовании.