У меня есть приложение, которое устанавливается с WiX 3 - большая часть установки хорошо работает к настоящему времени, но пытающийся заставить настольный ярлык работать, кажется, стоит мне моего ума...
У меня есть свое устанавливаемое приложение, и у меня уже есть ярлык на папке Start Menu - работает просто великолепно. Но как я бужу настольный ярлык и выполнение?
<Product Id="*" Name="....." UpgradeCode="MY-GUID">
<Package Id="*" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="foobar.cab" EmbedCab="yes" />
<Property Id="ALLUSERS">1</Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="FooBar"/>
</Directory>
<Directory Id="DesktopFolder" SourceName="Desktop"/>
<Directory Id="ProgramFilesFolder">
<Directory Id="FoobarDir" Name="FOOBAR">
<Directory Id="INSTALLLOCATION" Name="FooApp">
<Component Id="MainFiles" Guid=".....">
<File Id="FooMainApp" Source="FooMainApp.exe" />
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
....
<!-- this shortcut here works just fine ... -->
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="AppShortcut" Guid="...">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="FooBarApp" Description="..."
Target="[INSTALLLOCATION]FooMainApp.exe"
WorkingDirectory="INSTALLLOCATION"/>
</Component>
</DirectoryRef>
<!-- but this shortcut here never seems to work .. ... -->
<DirectoryRef Id="DesktopFolder">
<Component Id="DesktopShortcut" Guid="....." >
<Shortcut Id="DesktopAppShortcut"
Advertise="no"
Name="FooBarApp" Description="...."
Target="[INSTALLLOCATION]FooMainApp.exe"
WorkingDirectory="INSTALLLOCATION"/>
</Component>
</DirectoryRef>
Ошибки, которые я продолжаю получать:
ICE18: KeyPath для Компонента: 'DesktopShortcut' является Каталог: 'DesktopFolder'. Пара Каталога/Компонента должна быть перечислена в таблице CreateFolders.
ICE38: Компонент DesktopShortcut устанавливает на профиле пользователя. Это должно использовать ключ реестра под HKCU как его KeyPath, не файл.
ICE43: Компонент DesktopShortcut не рекламировал ярлыки. Это должно использовать ключ реестра под HKCU как его KeyPath, не файл.
Я не понимаю, какой WiX 3 / Windows Installer пытается сказать мне здесь.... кого-либо??
Оба компонента, AppShortcut
и DesktopShortcut
, на самом деле часть "основной" функции - я не вижу проблемы там. Я не могу выяснить то что же, спрашивается, могло быть неправильным здесь....
Обновление: хорошо, таким образом, я добавил некоторый материал ключа реестра к своему настольному ярлыку
<Component Id="DesktopShortcut" Guid="BF3587B4-F52E-411E-8814-CFCBF8201C0D">
<RegistryKey Root="HKCU" Key="Software\Foo Inc\FooBarApp\Installed"
Action="createAndRemoveOnUninstall">
<RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes"/>
</RegistryKey>
<Shortcut Id="DesktopShortcut" Directory="DesktopFolder"
Name="FooBar" WorkingDirectory="INSTALLLOCATION"
Icon="foobar.ico"
Target="[INSTALLOCATION]FooMainApp.exe"/>
</Component>
теперь сообщений ICE не стало, но когда я пытаюсь установить приложение, я получаю Ошибку 1909 - целевая папка не существует, или у Вас нет разрешения записать в него (или что-то как этот)
Обновление 2: вышеупомянутый предоставленный код кода действительно работает над Победой XP, но это продолжает приводить к сбою на Сервере Победы 2003 :-( Дальнейшие идеи??
Вот рабочий пример из нашего живого производственного кода ...
<Fragment>
<Component Id="DesktopShortcut" Directory="APPLICATIONFOLDER" Guid="*">
<RegistryValue Id="RegShortcutDesktop" Root="HKCU"
Key="SOFTWARE\ACME\settings" Name="DesktopSC" Value="1"
Type="integer" KeyPath="yes" />
<Shortcut Id="desktopSC" Target="[APPLICATIONFOLDER]MyApp.exe"
Directory="DesktopFolder" Name="My Application"
Icon="$(var.product).ico" IconIndex="0"
WorkingDirectory="APPLICATIONFOLDER" Advertise="no"/>
</Component>
</Fragment>
Каждое из этих ICE сообщений в основном жалуется на одно и то же: компонент, устанавливающий ярлык, должен иметь запись реестра в качестве keypath. Чтобы исправить это, добавьте в компонент что-то вроде этого:
<RegistryValue Root="HKCU" Key="Software\MyCompany\MyApplicationName"
Name="desktopShortcut" Type="integer" Value="1" KeyPath="yes"/>
То же самое относится и к компоненту, устанавливающему ярлык меню "Пуск". Взгляните на соответствующий пример из документации wix о создании ярлыка.