2015-10-15 171 views
6

使用Inno-Setup,我需要由管理员用户安装的软件可以由默认用户卸载。Inno-Setup:无需管理员权限即可卸载

参数特权要求最低,但问题依然存在。

我做了测试,在某些机器(所有这些都是Windows 7),并在几个我可以卸载使用默认的用户,但也有其他人并没有让我卸载,并要求管理员用户。

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

安装文件夹是C:\;

我不使用[注册]部分并在[DIRS]部分中的所有参数都使用权限:用户 - 修改

+0

非管理员没有Program Files文件夹的访问权限,所以如果这是程序的安装位置,那么你就是要求不可能的。 –

+0

@MarkRansom:如果安装程序在安装过程中更改权限,这不应该适用,是吗? –

+0

我已经做了一些测试,它的工作,但有一些机器,我不能卸载软件。 该软件被放置在C目录中。 –

回答

0

有要考虑几件事情:

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

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

  2. [Registry]部分类似。

  3. InnoSetup使用一种称为unins000.exe用于卸载文件。该文件包含默认情况下请求特权asInvoker的清单。据我所知,这不会因PrivilegesRequired设置而改变。到目前为止,asInvoker应该没问题。如果新版本的InnoSetup将其设置为更高的值,只要留意它就可以了。


对于其他游客发现这一点,并没有使用InnoSetup:

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

+1

安装文件夹是C:\,我没有使用[Registry]部分,并且[Dirs]部分中的所有参数都使用Permissions:users-modify。 –

+0

我已经做了一些测试,它的工作,但有一些机器,我不能卸载软件,所以我认为有一种风景,我不考虑。 –

+0

@RobsonPiernodeJesus:这是您应该添加到问题中的重要信息。 –

0

的Inno Setup的卸载程序请求的权限提升,如果安装了具有管理员或超级用户权限运行(无论它是否需要与PrivilegesRequired那些明确)。

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

这是一个位掩码,其中第1位(0×01)表示管理员权限,和第7位(0×40)表示功率的用户权限。


所以,如果你安装的应用程序作为管理员/高级用户,即使安装有PrivilegesRequired=lowest卸载程序将请求权限提升以获得相同的权限。检查unins000.dat中的标志,看看是否是这种情况。

+0

如何在unins000.dat文件中找到它? –

+0

它位于安装文件夹中。 –

+0

是的,但是我怎样才能读取这个文件并找到这些信息呢?当我用记事本打开时,会出现一些奇怪的字符。 –