如何让开发的程序显示在Windows系统的应用和功能列表中?
让C#开发的应用显示在Windows「应用和功能」板块的实现方法
Windows系统「应用和功能」里的软件条目本质是读取注册表特定路径下的配置项生成的,你只要按照规则写入对应配置,就能让你的应用出现在列表里,常用两种实现方案:
方案1:使用安装打包工具实现(推荐正式发布使用)
这是最稳妥不需要自己处理注册表逻辑的方案,适合对外发布的正式应用:
- 如果你用Visual Studio自带的Microsoft Visual Studio Installer Projects扩展打包:正常填写应用名称、版本、发布者、卸载逻辑等基础信息,生成的MSI安装包在安装时会自动写入对应注册表配置,安装完成后直接就能在「应用和功能」里看到条目。
- 如果你用Inno Setup、NSIS这类第三方打包工具:在打包脚本里配置好应用基础信息、卸载程序路径,打包后的安装包安装后也会自动生成对应条目。
方案2:C#代码手动写入注册表实现
如果你做的是绿色软件,不想做安装包,可以在应用首次启动时主动写入注册表配置,注意写入全局配置需要管理员权限。
注册表路径说明
根据你的应用位数和生效范围选择对应路径:
- 全局生效的64位应用(64位系统):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall - 全局生效的32位应用(64位系统):
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall - 仅当前用户生效(不需要管理员权限):
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
必选配置项
你需要在上述路径下新建一个唯一子项(推荐用应用GUID或者唯一应用名作为子项名),子项内必须包含以下值:
DisplayName(字符串类型):「应用和功能」列表中显示的应用名称DisplayVersion(字符串类型):应用的版本号Publisher(字符串类型):应用发布者名称UninstallString(字符串类型):点击卸载按钮时执行的命令,比如你的卸载程序路径,或者带卸载参数的应用启动路径,示例:"C:\Program Files\MyApp\MyApp.exe" /uninstall
可选配置项
添加后可以让条目显示更完整:
DisplayIcon(字符串类型):列表显示的图标路径,直接指向你的exe文件路径即可InstallDate(字符串类型):安装日期,格式为YYYYMMDDEstimatedSize(DWORD类型):应用占用磁盘大小,单位为KB
C#代码示例
using Microsoft.Win32; // 示例:写入当前用户维度的应用条目,不需要管理员权限 void RegisterAppInUninstallList() { string subKeyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyUniqueAppId"; using (RegistryKey key = Registry.CurrentUser.CreateSubKey(subKeyPath)) { if (key == null) return; key.SetValue("DisplayName", "我的C#应用"); key.SetValue("DisplayVersion", "1.0.0"); key.SetValue("Publisher", "我的开发团队"); key.SetValue("UninstallString", @"""C:\Users\XXX\AppData\Local\MyApp\MyApp.exe"" /uninstall"); // 可选参数 key.SetValue("DisplayIcon", @"""C:\Users\XXX\AppData\Local\MyApp\MyApp.exe"""); key.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd")); key.SetValue("EstimatedSize", 10240, RegistryValueKind.DWord); // 约10MB } }
注意事项
- 写入
HKEY_LOCAL_MACHINE下的注册表需要应用获得管理员权限,你可以给应用添加manifest文件声明需要管理员权限,或者首次启动时判断权限不足就主动提权。 - 应用卸载时要记得删除对应的注册表子项,避免「应用和功能」里残留无效条目。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

