2016-12-08 4 views
0

Я работаю над приложением C#. У меня есть установщик Wix, и я хочу создать ярлыки для своего приложения. После некоторых исследований я нашел код для создания ярлыков для рабочего стола и меню «Пуск».Wix не удалось создать ярлык

Существует мой код:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramMenuFolder"> 
    <Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/> 
    </Directory> 
    <Directory Id="DesktopFolder" SourceName="Desktop"/> 
</Directory> 

<!-- Shortcuts --> 
<DirectoryRef Id="ApplicationProgramsFolder"> 
    <Component Id="ApplicationShortcut" Guid="*"> 
    <Shortcut Id="ApplicationStartMenuShortcut" 
       Name="$(var.product)" 
       Description="$(var.product) application" 
       Target="MyApplication.exe" 
       WorkingDirectory="INSTALLFOLDER"/> 
    <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/> 
    <RegistryKey Root="HKCU" Key="SOFTWARE\$(var.compagny)\$(var.product)"> 
     <RegistryValue Name="installed" Type="integer" Value="1" KeyPath="yes" /> 
    </RegistryKey> 
    </Component> 
</DirectoryRef> 
<DirectoryRef Id="DesktopFolder"> 
    <Component Id="ApplicationShortcutDesk" Guid="*"> 
    <Shortcut Id="ApplicationStartDeskShortcut" 
       Name="$(var.product)" 
       Description="$(var.product) application" 
       Target="MyApplication.exe" 
       WorkingDirectory="INSTALLFOLDER"/> 
    <RemoveFolder Id="DesktopFolder" On="uninstall"/> 
    <RegistryKey Root="HKCU" Key="SOFTWARE\$(var.compagny)\$(var.product)"> 
     <RegistryValue Name="installed" Type="integer" Value="1" KeyPath="yes"/> 
    </RegistryKey> 
    </Component> 
</DirectoryRef> 

<Feature Id="ProductFeature" Title="$(var.product)" Level="1"> 
    <ComponentRef Id="ApplicationShortcut"/> 
    <ComponentRef Id="ApplicationShortcutDesk"/> 
</Feature> 

После этого регистр создается в HKCU \ SOFTWARE \ MyCompagny \ продукт с ключом установлен. Но нет ярлыка.

Что я пропустил?

Редактировать:

Есть журнал:

MSI (ы) (5C: В8) [14: 51: 31: 801]: Выполнение оп: ActionStart (Имя = CreateShortcuts, Описание = Создание ярлыков, Шаблон = Ярлык: [1])

Действие 14:51:31: CreateShortcuts. Создание ярлыков

MSI (ы) (5C: В8) [14: 51: 31: 802]: Выполнение оп: IconCreate (иконка = icone.ico, данных = BinaryData)

CreateShortcuts: Ярлык: Icone. ICO

MSI (ы) (5C: В8) [14: 51: 31: 808]: Выполнение оп: SetTargetFolder (Папка = 23 \ MyCompagny)

MSI (ы) (5C: В8) [14 : 51: 31: 810]: SHELL32 :: SHGetFolderPath возвращается: C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs

MSI (s) (5C: B8) [14: 51: 31: 810]: проведение оп: SetTargetFolder (Папка = 25)

MSI (ы) (5C: В8) [14: 51: 31: 812]: Shell32 :: SHGetFolderPath возвращается: C: \ Users \ Public \ Desktop

MSI (5C: B8) [14: 51: 31: 812]: Выполнение op: ActionStart (Name = WriteRegistryValues, Description = Написание значений системного реестра, Template = Key: [1], Name: [2], Value: [3])

Действие 14:51:31: WriteRegistryValues.запись значений системного реестра

MSI (ы) (5C: В8) [14: 51: 31: 812]: Выполнение оп: ProgressTotal (Всего = 2, Тип = 1, ByteEquivalent = 13200)

MSI (s) (5C: B8) [14: 51: 31: 813]: Выполнение op: RegOpenKey (Root = -2147483647, Key = SOFTWARE \ MyCompagny \ MyApplication ,, BinaryType = 0 ,,)

MSI (s) (5C: B8) [14: 51: 31: 813]: Выполнение op: RegAddValue (Name = установлено, Value = # 1)

WriteRegistryValues: Key: \ SOFTWARE \ MyCompagny \ MyApplication, Name: installed, Value : № 1

MSI (ы) (5C: В8) [14: 51: 31: 813]: Выполнение оп: RegAddValue (Имя = установлена, Value = # 1,)

WriteRegistryValues: Ключ: \ Software \ MyCompagny \ MyApplication , Имя: установлено, Value: # 1

+0

Это может быть проблема с Guid? (Я не знаю, как это работает) –

ответ

0

Вы должны убедиться, что ваш ярлык компонент упоминается в вашем Feature списка. Вот пример:

<Feature Id="ProductFeature" Title="ProductTitle" Level="1"> 
    <ComponentRef Id='ApplicationShortcutDesk' /> 
</Feature> 

Надеюсь, что это поможет!

+0

Я забыл вставить эту часть в свой вопрос, но я это сделал. Это все равно не работает. Я прочитал много темы об этом, и я не нахожу, что делаю неправильно. –

1

Вы неправильно использовали собственность DesktopFolder.

Ярлык Я думаю собирается в C:\Desktop\

Это потому, что вы переименовали Ну определено свойство «DesktopFolder» для справки «Desktop», так что теперь вы ставите ярлык на [TARGETDIR]\[DesktopFolder], который, как упоминалось выше, как правило, быть C:\Desktop\

Вы хотите использовать

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramMenuFolder"> 
    <Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/> 
    </Directory> 
    <Directory Id="DesktopFolder"/> 
</Directory> 

уведомление не Name="" на т он DesktopFolder.

Также вы должны обязательно удалить

<RemoveFolder Id="DesktopFolder" On="uninstall"/> 

из компонента ApplicationShortcutDesk, я бы сказал, только когда-либо использовать RemoveFolder по папкам вы знаете, что вы владеете и создали с установки.

+0

С вашим ответом и заменой моих обеих целей на «Target =» [# MyApplication.exe] «это работает. спасибо –