我正在开发一个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中创建一个已安装密钥的寄存器。但没有捷径。
我错过了什么?
编辑:
这里有日志:
(5C:B8) 14:51:31:801:执行op: ActionStart(Name=CreateShortcuts,Description=Creating快捷方式,Template=Shortcut: 1) 行动14:51:31: CreateShortcuts。创建快捷方式 (5C:B8) 14:51:31:802:执行op: IconCreate(Icon=icone.ico,Data=BinaryData) CreateShortcuts:快捷方式: icone.ico (5C:B8) 14:51:31:808:执行op: SetTargetFolder(Folder=23\MyCompagny) MSI (5C:B8) 14:51:31:810: SHELL32 32::SHGetFolderPath返回: C:\ProgramData\Microsoft\Windows\Start菜单\程序 (5C:B8) 14:51:31:810:执行op: SetTargetFolder(Folder=25) MSI (5C:B8) 14:51:31:812: SHELL32 32::SHGetFolderPath返回: C:\Users\Public\Desktop MSI (s) (5C:B8) 14:51:31:812:执行op: ActionStart(Name=WriteRegistryValues,Description=Writing系统注册表值,Template=Key: 1,名称: 2,值: 3) 行动14:51:31: WriteRegistryValues。写入系统注册表值 (5C:B8) 14:51:31:812:执行op: ProgressTotal(Total=2,Type=1,ByteEquivalent=13200) (5C:B8) 14:51:31:813:执行op: RegOpenKey(根=-2147483647,Key=SOFTWARE\MyCompagny\MyApplication,BinaryType=0, (5C:B8) 14:51:31:813:执行op: RegAddValue(Name=installed,Value=#1,) WriteRegistryValues:键:\软件\MyCompagny\MyApplication,名称:已安装,值:#1 (5C:B8) 14:51:31:813:执行op: RegAddValue(Name=installed,Value=#1,) WriteRegistryValues:键:\软件\MyCompagny\MyApplication,名称:已安装,值:#1
发布于 2016-12-08 21:48:03
您不正确地使用了DesktopFolder属性。
我想你的捷径是进入C:\Desktop\
这是因为您将定义良好的属性"DesktopFolder“重命名为引用”桌面“,所以现在您在[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。
发布于 2016-12-08 12:33:49
您需要确保快捷组件在功能列表中被引用。下面是一个例子:
<Feature Id="ProductFeature" Title="ProductTitle" Level="1">
<ComponentRef Id='ApplicationShortcutDesk' />
</Feature>希望这能帮上忙!
https://stackoverflow.com/questions/41038847
复制相似问题