![](/img/trans.png)
[英]Inno Setup Uninstall entry is not removed when uninstalling non-administrator installation using another (administrator) account
[英]Inno Setup: Uninstall without administrator privilege
使用 Inno Setup,我需要管理员用户安装的软件可以被默认用户卸载。
参数PrivilegesRequired
lowest
,但问题仍然存在。
我在一些机器上进行了测试(它们都是 Windows 7),在一些机器上我可以使用默认用户卸载,但还有其他机器不允许我卸载并请求管理员用户。
我没有在问题和互联网搜索中识别出模式。
安装文件夹是C:\\;
我没有使用[Registry]
部分,并且[Dirs]
部分中的所有参数都在使用Permissions: users-modify
。
有几件事情需要考虑:
通常,安装文件夹是 %ProgramFiles% 或 %ProgramFiles(x86)%,这是受操作系统保护的文件夹。 要绕过此保护,安装程序必须更改安装文件夹的权限以允许任何人删除。
在[Dirs]部分,您可以使用Permissions:users-modify
(如果需要甚至更宽松)。
[Registry]部分类似。
InnoSetup 使用名为unins000.exe
的文件进行卸载。 此文件包含一个清单,默认情况下该清单请求特权asInvoker
。 据我所知,这不会随着PrivilegesRequired
设置而改变。 到目前为止, asInvoker
应该没问题。 请密切注意它,以防新版本的 InnoSetup 将其设置为更高的值。
对于发现此问题而不使用 InnoSetup 的其他访问者:
如果您没有在安装程序中嵌入清单,Windows 将使用试探法进行安装程序检测 (Microsoft, .pptx) 。 如果启发式的结果是肯定的,Windows 将自动请求管理员提升。 因此,请使用清单并请求asInvoker
权限。
Inno Setup 卸载程序请求权限提升,如果安装程序以管理员或超级用户权限运行(无论是否需要明确使用PrivilegesRequired
)。
此信息存储在unins000.dat
字节 14C(十六进制)/322(十进制)中。
它是一个位掩码,其中位 1 (0x01) 表示管理员权限,位 7 (0x40) 表示高级用户权限 [已废弃]。
因此,如果您以管理员/高级用户身份安装应用程序,即使安装程序具有PrivilegesRequired=lowest
,卸载程序也会请求提升权限以获得相同的权限。 检查unins000.dat
的标志以查看是否是这种情况。
另一件事是,在 Windows 10 中,如果您从设置应用程序(而不是从控制面板)启动卸载程序,它将始终以管理员权限启动:
Windows 10 中“应用程序和功能”的解决方法启动提升的单用户卸载程序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.