如何在VS2022 Installer项目中将程序添加到用户程序菜单
Visual Studio 2022 Setup Project 将程序添加到目标用户程序菜单的可行方法
前置要求:先确认Visual Studio已安装 Microsoft Visual Studio Installer Projects 2022 扩展,否则无法创建、编辑Setup Project类型的部署项目。
方法1:文件系统视图可视化配置(推荐,零代码,覆盖90%以上常规场景)
- 在解决方案资源管理器中右键点击你的Setup Project项目,依次选择
View->File System,打开安装包文件映射配置界面 - 在左侧文件系统节点列表的空白处右键,选择
Add Special Folder,根据你的安装范围选择对应目录:- 要给设备所有登录用户展示程序菜单快捷方式:选择
Common Programs Menu,该目录对应系统公共程序菜单路径,安装时需要管理员权限才能写入 - 要仅给当前运行安装包的用户展示快捷方式:选择
User's Programs Menu,普通用户权限即可正常写入
注意不要选错成User's Startup/Common Startup文件夹,这两个是开机自启目录,选了之后程序会在用户开机时自动启动,不是程序菜单的展示位置,不少人第一次配都踩过这个坑
- 要给设备所有登录用户展示程序菜单快捷方式:选择
- 选中你刚添加的程序菜单对应节点,在右侧空白内容区右键,选择
Create New Shortcut - 在弹出的文件选择框中,定位到
Application Folder节点(也就是你配置的程序安装到目标机器后的根目录),选中你要创建快捷方式的主程序exe文件,点击确认 - 按需修改快捷方式配置:右键刚生成的快捷方式打开属性面板,可修改快捷方式显示名称、图标、启动参数,记得把
Working Folder属性设置为Application Folder,避免程序启动后找不到同目录下的配置、资源文件 - 重新编译安装包即可,安装完成后对应快捷方式会自动出现在系统程序菜单中。
方法2:导入预配置的快捷方式文件(适配特殊快捷方式配置需求)
如果需要配置可视化界面不支持的快捷方式属性(比如预设兼容模式、自定义右键扩展项等),可以用这个方法:
- 提前在本地电脑上创建好对应快捷方式,配置好所有需要的特殊属性
- 按方法1的步骤打开File System视图,添加对应范围的程序菜单特殊节点
- 选中程序菜单节点,在右侧空白区右键选择
Add->File,选中你提前做好的.lnk快捷方式文件导入项目 - 选中导入的lnk文件,在属性面板把
Target属性关联到Application Folder下的主程序exe,不要保留本地绝对路径,否则安装到其他设备后快捷方式会失效 - 编译打包即可。
方法3:自定义操作动态生成(适配高度定制化安装场景)
如果需要根据安装过程中用户的勾选状态、输入内容动态决定是否添加快捷方式、动态修改快捷方式名称/路径,可以用自定义操作实现,灵活度最高但需要写少量代码:
- 给解决方案新增一个类库项目,添加Installer类,重写
OnAfterInstall方法 - 在重写的方法中,通过
Context.Parameters读取安装时传入的参数:包括程序实际安装路径、用户选择的安装范围(当前用户/所有用户)、用户是否勾选了“添加程序菜单快捷方式”选项 - 代码中动态获取对应程序菜单的物理路径:
- 当前用户程序菜单路径通过
Environment.GetFolderPath(Environment.SpecialFolder.Programs)获取 - 所有用户公共程序菜单路径通过
Environment.GetFolderPath(Environment.SpecialFolder.CommonPrograms)获取
- 当前用户程序菜单路径通过
- 引入
IWshRuntimeLibrary(需要添加Windows Script Host Object Model的COM引用),动态生成.lnk快捷方式到目标路径,配置好目标程序路径、工作目录、图标等属性 - 把该类库项目的主输出添加到Setup Project的
Custom Actions视图的Install节点下,编译安装包即可。
注意事项:
- 如果安装包的
InstallAllUsers属性设为False(即仅为当前用户安装),不要往Common Programs Menu写入内容,会触发权限不足报错导致安装失败- 所有路径不要硬编码,必须通过安装项目的特殊文件夹变量、系统环境变量动态获取,适配不同系统版本、不同用户目录配置的差异
- 建议给快捷方式配置和主程序一致的自定义图标,默认生成的快捷方式是系统通用文档图标,展示效果很差
内容的提问来源于stack exchange,提问作者c136
相关产品推荐
相关产品推荐

