首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wix无法创建快捷方式

Wix无法创建快捷方式
EN

Stack Overflow用户
提问于 2016-12-08 11:51:57
回答 2查看 346关注 0票数 0

我正在开发一个C#应用程序。我有一个安装程序Wix,我想为我的应用程序创建快捷方式。经过一些研究,我找到了一个代码来创建桌面和开始菜单的快捷方式。

这是我的密码:

代码语言:javascript
复制
<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

EN

回答 2

Stack Overflow用户

发布于 2016-12-08 21:48:03

您不正确地使用了DesktopFolder属性。

我想你的捷径是进入C:\Desktop\

这是因为您将定义良好的属性"DesktopFolder“重命名为引用”桌面“,所以现在您在[TARGETDIR]\[DesktopFolder]上放置了一个快捷方式,上面提到的快捷方式通常是C:\Desktop\

你想用

代码语言:javascript
复制
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramMenuFolder">
    <Directory Id="ApplicationProgramsFolder" Name="$(var.compagny)"/>
  </Directory>
  <Directory Id="DesktopFolder"/>
</Directory>

注意,在Name=""上没有DesktopFolder。

此外,你也应该明确地删除

代码语言:javascript
复制
<RemoveFolder Id="DesktopFolder" On="uninstall"/>

从ApplicationShortcutDesk组件中,我要说的是,只有在您知道自己的文件夹和安装时创建的文件夹上才会使用RemoveFolder。

票数 1
EN

Stack Overflow用户

发布于 2016-12-08 12:33:49

您需要确保快捷组件功能列表中被引用。下面是一个例子:

代码语言:javascript
复制
<Feature Id="ProductFeature" Title="ProductTitle" Level="1">
    <ComponentRef Id='ApplicationShortcutDesk' />
</Feature>

希望这能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41038847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档