软件发布 打包 卸载 控制面板

问题遇到的现象和发生背景

通过注册表

HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall

使得软件的卸载程序 显示在控制面板
问题: 使用控制面板卸载的时候提示没有权限
错误截图:

img

操作环境、软件版本等信息

QT5 + VS 2019

尝试过的解决方法

1.使用runas 不合适,要考虑用户的体验度,尽量傻瓜式安装
2.本来使用的QSetting ,用win API RegCreateKeyEx 还是不行
3.修改UninstallString字段为脚本也不行
4.现在安装程序 uac 为管理员

requireAdministrator (/level='requireAdministrator') 是 (/uiAccess='true')

5.发现到的问题

C:\Program Files\

安装在在该路径可以正常卸载

我想要达到的结果

能在控制面板正常卸载程序

你是自己的安装程序?用现成的打包工具,都能很好解决uac问题,不必重复造轮子了。

【以下回答由 GPT 生成】

首先,为了在控制面板中能够正常卸载程序,以下是一些优化的建议和解决方案:

  1. 确保程序在注册表中正确注册:请确保在注册表的相应位置正确注册了卸载程序。您可以使用RegCreateKeyEx函数来创建注册表键,使用RegSetValueEx函数来设置注册表值。请确保在注册表中的UninstallString字段中设置了正确的卸载脚本路径。如果已经尝试过这个解决方法,请确保在注册表键和值的操作上没有遗漏或错误。
HKEY hKey;
LPCTSTR subKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{YourProductGuid}";
DWORD dwDisposition;

RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);

LPCTSTR valueName = "UninstallString";
LPCTSTR valueData = "{YourUninstallScriptPath}";

RegSetValueEx(hKey, valueName, 0, REG_SZ, (LPBYTE)valueData, strlen(valueData) * sizeof(TCHAR));

RegCloseKey(hKey);
  1. 确保程序以管理员权限运行:您可以在安装程序的.manifest文件中,将请求管理员权限的标记添加到文件中。这将确保在安装程序运行时会以管理员权限运行。请注意,如果您已经在UAC设置中将安装程序设置为管理员权限,那么可以跳过此步骤。
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  1. 将程序安装在默认的系统路径下:如果只有安装在"C:\Program Files\"路径下的程序能够正常卸载,那么请确保您的程序安装在此默认路径下。这可能与UAC和权限有关。如果您的程序必须安装在其他路径,请确保在安装过程中正确设置了安装路径和权限。

  2. 确保没有其他权限限制:检查您的程序是否需要在运行时访问其他资源或目录。有时候,权限会被限制在程序可访问的范围内,导致无法卸载。确保您的程序拥有足够的权限来访问和修改相关的文件和目录。

如果您已经尝试了以上的建议和解决方案,并且问题仍然存在,那么问题可能更加复杂,我无法给出具体的解决方案。在这种情况下,我建议您咨询更专业的IT支持人员或开发人员来获取更准确的帮助。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^