WiX安装选项---开始菜单项

简介:

参考文档: How To: Create a Shortcut on the Start Menu,How To: Create an Uninstall Shortcut

制作的安装程序安装后,都要在开始菜单上生成一个应用程序的菜单,通常包括调用应用程序的快速入口和卸载应用程序项。下面取一个例子来看:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="a960cf35-0779-43e8-923b-35638f2bfc42" Name="Minimal" Language="2052" Version="1.0.0.0" Manufacturer="Geffzhang" UpgradeCode="0bf7e020-5bbd-4a06-8e39-e715999edbf5">
    <Package InstallerVersion="200" Compressed="yes" Description="Minimal Windows Installer Sample" Comments="This installer database contains the logic and data required to install Minimal Windows Installer Sample." />
    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
    <Property Id="EnableEV" Value="1">
    </Property>
    
    <Condition Message="你必须有管理员权限才能安装应用程序"><![CDATA[Privileged]]></Condition>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLLOCATION" Name="Minimal">
          <Component Id="Component1" Guid="{1781A625-8ACB-45E7-A8BA-219D81760B2E}">
            <CreateFolder />
            <Environment Id="TestMinVar" Action="set" Part="all" Name="MinEnvVar" Permanent="no" System="yes" Value="8" />
            <File Id="File_Payload" Source="payload.txt" KeyPath="yes" />
          </Component>
          <Directory Id="GAC" Name="GAC">
            <Component Id="RTGACTest" Guid="22887611-B13E-41EE-897C-D78830E68AEB" DiskId="1">
              <!-- Runtime, assembly in GAC -->
              <File Id="F_RT_GACTEST"  LongName="GACTest.dll" Source="..\build\GACTest.dll" KeyPath="yes" Assembly=".net" />
            </Component>
          </Directory>
          <Component Id="DTGACTest" Guid="FB935B7D-D2BD-4B83-A26C-A9376EBA0915" DiskId="1">
            <!--Design-time, private assembly-->
            <File Id="F_DT_GACTest" LongName="GACTest.dll" Source="..\build\GACTest.dll" KeyPath="yes" />
            <Registry Id="R_DT_MyControl_AssemblyFolders" Root="HKLM" Key="SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\[ProductName]" Value="[$DTGACTest]" Type="string" />
          </Component>
        </Directory>
      </Directory>
      
      <Directory Id="ProgramMenuFolder">
        <Directory Id="MinimalStartMenuFolder" Name="Minimal">
          <Component Id="StartMenuFolder" Guid="B3AEC4C4-3F8E-4865-B87A-B750533776B5" >
            <Shortcut Id="ApplicationStartMenuShortcut" 
                      Name="Minimal Test"  Target="[INSTALLLOCATION]payload.txt"
             WorkingDirectory="INSTALLLOCATION"/>
            <Shortcut Id="UninstallProduct"
                  Name="Uninstall Minimal"
                    Description="Uninstalls My Application"
                  Target="[System64Folder]msiexec.exe"
                  Arguments="/x [ProductCode]"/>

            <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
            <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
          </Component>
        </Directory>
      </Directory>
    </Directory>    

    <Feature Id="ProductFeature" Title="Minimal" Level="1">
      <ComponentRef Id="Component1" />
      <ComponentRef Id="DTGACTest"/>
      <ComponentRef Id="RTGACTest" />
      <ComponentRef Id="StartMenuFolder"/>
    </Feature>
    
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
    <UIRef Id="WixUI_InstallDir" />
    <UI />
  </Product>
</Wix>
上面例子中开始菜单项的内容是这一段:

<Directory Id="ProgramMenuFolder">
        <Directory Id="MinimalStartMenuFolder" Name="Minimal">
          <Component Id="StartMenuFolder" Guid="B3AEC4C4-3F8E-4865-B87A-B750533776B5" >
            <Shortcut Id="ApplicationStartMenuShortcut" 
                      Name="Minimal Test"  Target="[INSTALLLOCATION]payload.txt"
             WorkingDirectory="INSTALLLOCATION"/>
            <Shortcut Id="UninstallProduct"
                  Name="Uninstall Minimal"
                    Description="Uninstalls My Application"
                  Target="[System64Folder]msiexec.exe"
                  Arguments="/x [ProductCode]"/>

            <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
            <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
          </Component>
        </Directory>
      </Directory>
    </Directory>

开始菜单项和要安装的应用程序要分开放在不同的Directory里面,ProgramMenuFolder是标准的Windows开始菜单,第二个Directory将是在windows开始菜单下创建的一个菜单项,我们把它命名
为Minimal,菜单的快捷方式包括三个元素:一个是Component 元素是WiX安装元素的原子单位,Component元素下的Shortcut就是快捷菜单项了,RemoveFolder 元素保证在卸载应用程序的时候
做相关的清理工作。上面的例子中有两个快捷方式,一个是Minimal Test,另一个是Uninstall Minimal,这两个就是Windows开始菜单中所看到的菜单项了。
Windows Installer System64Folder 属性在32位的机器上被解析为System32 目录,在64位的机器上被解析为 SysWow64 目录.

本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

目录
相关文章
|
图形学 索引
Unity 之 三种抽奖示例
Unity做的三种抽奖的示例,根据需求修改动画时间和效果以及获取概率,文末附示例链接。
1247 0
Unity 之 三种抽奖示例
|
3月前
|
编解码 自然语言处理
通义万相开源14B数字人Wan2.2-S2V!影视级音频驱动视频生成,助力专业内容创作
今天,通义万相的视频生成模型又开源了!本次开源Wan2.2-S2V-14B,是一款音频驱动的视频生成模型,可生成影视级质感的高质量视频。
724 29
一文带你了解 PoE 标准和功率
【10月更文挑战第1天】
1749 0
一文带你了解 PoE 标准和功率
|
弹性计算 运维 自然语言处理
开发者评测|操作系统智能助手OS Copilot
OS Copilot 是阿里云针对Linux操作系统推出的一款智能助手,它利用大模型技术提供自然语言问答、辅助命令执行和系统运维调优等功能,旨在提高Alibaba Cloud Linux的使用效率。OS Copilot在新人上手时并不简单,文档指引不够清晰,存在一些步骤无法顺利执行的问题,比如环境配置和命令执行。此外,产品目前仅支持Alibaba Cloud Linux,限制了其应用范围。虽然OS Copilot在一些基本功能上表现尚可,如解答问题和编写简单脚本,但在处理复杂任务或自动化运维时显得不足。总体而言,OS Copilot对新手和阿里云环境有一定的帮助,但功能和使用体验仍有改进空间。
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。
|
监控 JavaScript 数据库
OpenLLMetry:完美支持 LLM 应用的开源监测工具
【2月更文挑战第16天】OpenLLMetry:完美支持 LLM 应用的开源监测工具
1106 1
OpenLLMetry:完美支持 LLM 应用的开源监测工具
|
人工智能 自然语言处理 数据挖掘
Claude 3.5:一场AI技术的惊艳飞跃 | AIGC
在这个科技日新月异的时代,人工智能(AI)的进步令人惊叹。博主体验了Claude 3.5 Sonnet的最新功能,对其卓越的性能、强大的内容创作与理解能力、创新的Artifacts功能、视觉理解与文本转录能力、革命性的“computeruse”功能、广泛的应用场景与兼容性以及成本效益和易用性深感震撼。这篇介绍将带你一窥其技术前沿的魅力。【10月更文挑战第12天】
476 1
|
资源调度 分布式计算 Kubernetes
技术抉择:阿里云13年后重构全部核心调度系统
在阿里云十三年的发展历史上,重新设计调度系统算得上是一个重要的技术抉择。
1676 99
技术抉择:阿里云13年后重构全部核心调度系统
|
人工智能 弹性计算 自然语言处理
解决方案应用实例 | 零售云业务中台+超级App,阿里云助力海底捞全面实现“云上捞”
2018年,海底捞和阿里云合作搭建数据中台、业务中台和移动中台的基础架构,并在此基础上升级了海底捞超级App,重构了会员体系。同年,海底捞在北京开设了第一家智慧餐厅,采用了自动配锅机、智能传菜机器人和智能厨房管理系统。2019年,海底捞的订餐排号系统搬上云端。到2020年,海底捞将自动配锅机和智能传菜机器人推向了数百家门店,同时,后勤行政系统也上云,从前端到后端所有核心业务系统全部上云,海底捞至此全面实现了“云上捞”。
6117 2
解决方案应用实例 | 零售云业务中台+超级App,阿里云助力海底捞全面实现“云上捞”
|
存储 前端开发 定位技术
用Three.js搞个炫酷的3D区块地图
常用的3D区块地图除了那个区块,还要满足波纹散点、渐变柱体、飞线、下钻上卷、视角适配等,点开我,这就安排!用Three.js给你搞一个!
用Three.js搞个炫酷的3D区块地图
下一篇
开通oss服务