我正在开发一个C#应用程序。我有一个安装程序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 \ Product中创建一个寄存器。但没有捷径。
我错过了什么?
编辑:
有日志:
MSI(s)(5C:B8)[14:51:31:801]:执行操作:ActionStart(Name = CreateShortcuts,Description =创建快捷方式,Template = Shortcut:[1])
动作14:51:31:CreateShortcuts。创建快捷方式
MSI(5C:B8)[14:51:31:802]:执行操作:IconCreate(Icon = icone.ico,Data = BinaryData)
CreateShortcuts:快捷方式:icone.ico
MSI(5C:B8)[14:51:31:808]:执行操作:SetTargetFolder(Folder = 23 \ MyCompagny)
MSI(5C:B8)[14:51:31:810]:SHELL32 :: SHGetFolderPath返回:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs
MSI(5C:B8)[14:51:31:810]:执行操作:SetTargetFolder(Folder = 25)
MSI(5C:B8)[14:51:31:812]:SHELL32 :: SHGetFolderPath返回:C:\ Users \ Public \ Desktop
MSI(5C:B8)[14:51:31:812]:执行操作:ActionStart(Name = WriteRegistryValues,Description =编写系统注册表值,Template = Key:[1],Name:[2 ],价值:[3])
动作14:51:31:WriteRegistryValues。编写系统注册表值
MSI(5C:B8)[14:51:31:812]:执行操作:ProgressTotal(总计= 2,类型= 1,字节等效= 13200)
MSI(5C:B8)[14:51:31:813]:执行op:RegOpenKey(Root = -2147483647,Key = SOFTWARE \ MyCompagny \ MyApplication ,, BinaryType = 0 ,,)
MSI(5C:B8)[14:51:31:813]:执行操作:RegAddValue(名称=已安装,值=#1,)
WriteRegistryValues:Key:\ SOFTWARE \ MyCompagny \ MyApplication,Name:installed,Value:#1
MSI(5C:B8)[14:51:31:813]:执行操作:RegAddValue(名称=已安装,值=#1,)
WriteRegistryValues:Key:\ SOFTWARE \ MyCompagny \ MyApplication,Name:installed,Value:#1
答案 0 :(得分:1)
您未正确使用DesktopFolder
属性。
我认为的快捷方式将进入C:\Desktop\
这是因为您重命名了Well定义的属性&#34; DesktopFolder&#34;参考&#34;桌面&#34;所以现在你在[TARGETDIR]\[DesktopFolder]
设置一个快捷方式,如上所述通常是C:\Desktop\
您想要使用
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/>
</Directory>
<Directory Id="DesktopFolder"/>
</Directory>
在DesktopFolder上注意没有Name=""
。
你也一定要删除
<RemoveFolder Id="DesktopFolder" On="uninstall"/>
来自ApplicationShortcutDesk组件的,我想说只有在你知道你拥有并使用安装创建的文件夹上使用RemoveFolder。
答案 1 :(得分:0)
您需要确保功能列表中引用了快捷键组件。这是一个例子:
<Feature Id="ProductFeature" Title="ProductTitle" Level="1">
<ComponentRef Id='ApplicationShortcutDesk' />
</Feature>
希望有所帮助!