Inno-Setup:无管理员权限的卸载

问题描述 投票:6回答:2

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

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

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

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

安装文件夹是C:\;

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

windows inno-setup
2个回答
0
投票

有几件事需要考虑:

  1. 通常,安装文件夹是%ProgramFiles%或%ProgramFiles(x86)%,这是受操作系统保护的文件夹。要绕过此保护,安装程序必须更改安装文件夹的权限以允许任何人删除。 在[Dirs]部分,你可以使用Permissions:users-modify(如果需要甚至更宽松)。
  2. 类似于[Registry]部分。
  3. InnoSetup使用名为unins000.exe的文件进行卸载。此文件包含一个清单,默认情况下请求权限asInvoker。据我所知,这不会随着PrivilegesRequiredsetting而改变。到目前为止,asInvoker应该没问题。如果新版本的InnoSetup将它设置得更高,请密切关注它。

对于其他访问者发现此而不使用InnoSetup:

如果您没有在安装程序中嵌入清单,Windows将使用heuristics for installer detection (Microsoft, .pptx)。如果启发式结果为肯定结果,Windows将自动请求管理员提升。因此,使用清单并请求asInvoker权限。


0
投票

如果安装程序是使用管理员或高级用户权限运行的,则Inno Setup卸载程序会请求权限提升(无论是否需要使用PrivilegesRequired显式安装)。

该信息存储在unins000.dat的字节14C(十六进制)/ 322(十进制)中。

它是位掩码,其中位1(0x01)表示管理员权限,位7(0x40)表示高级用户权限[已废弃]。


因此,如果您以管理员/超级用户身份安装应用程序,即使安装程序具有PrivilegesRequired=lowest,卸载程序也会请求权限提升以获得相同的权限。检查unins000.dat中的旗帜,看看是否是这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.