繁体   English   中英

Inno Setup:无需管理员权限即可卸载

[英]Inno Setup: Uninstall without administrator privilege

使用 Inno Setup,我需要管理员用户安装的软件可以被默认用户卸载。

参数PrivilegesRequired lowest ,但问题仍然存在。

我在一些机器上进行了测试(它们都是 Windows 7),在一些机器上我可以使用默认用户卸载,但还有其他机器不允许我卸载并请求管理员用户。

我没有在问题和互联网搜索中识别出模式。

安装文件夹是C:\\;

我没有使用[Registry]部分,并且[Dirs]部分中的所有参数都在使用Permissions: users-modify

有几件事情需要考虑:

  1. 通常,安装文件夹是 %ProgramFiles% 或 %ProgramFiles(x86)%,这是受操作系统保护的文件夹。 要绕过此保护,安装程序必须更改安装文件夹的权限以允许任何人删除。

    [Dirs]部分,您可以使用Permissions:users-modify (如果需要甚至更宽松)。

  2. [Registry]部分类似。

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM