Inno setup 使用Inno安装程序创建一个安装程序,允许任何用户卸载应用程序

Inno setup 使用Inno安装程序创建一个安装程序,允许任何用户卸载应用程序,inno-setup,Inno Setup,因此,情况是:我们使用Inno设置创建一个安装程序。该软件将由管理员安装(例如,当计算机在提供给用户之前进行设置时),但我们希望普通用户能够卸载/更新安装(无管理员权限)。调整对已安装文件的权限,并在安装后运行icacls.exe,以授予所有用户访问卸载程序可执行文件的权限,这使我几乎达到了目标 唯一缺少的是,如果管理员安装了该程序,则它在“控制面板”->“卸载程序”--其他用户列表中不可见。(非管理员)用户必须知道在哪里找到uninst000.exe并运行它 如何制作Inno Setup安装脚

因此,情况是:我们使用Inno设置创建一个安装程序。该软件将由管理员安装(例如,当计算机在提供给用户之前进行设置时),但我们希望普通用户能够卸载/更新安装(无管理员权限)。调整对已安装文件的权限,并在安装后运行icacls.exe,以授予所有用户访问卸载程序可执行文件的权限,这使我几乎达到了目标

唯一缺少的是,如果管理员安装了该程序,则它在“控制面板”->“卸载程序”--其他用户列表中不可见。(非管理员)用户必须知道在哪里找到uninst000.exe并运行它


如何制作Inno Setup安装脚本,以便任何用户(无论是否具有管理员权限)都可以通过控制面板卸载程序?

您可以使用
PrivilegesRequired=none

它类似于
PrivilegesRequired=lower
,只是它将尝试写入非用户区域。这意味着它将把卸载密钥写入HKLM

请注意,
none
值不再正式记录:


另一个选项是您自己在HKLM中创建卸载密钥。使用
{uninstallexe}
常量解析安装程序的路径


虽然这只会将卸载程序密钥添加到HKLM。但是,只要安装程序是以管理员权限运行的,卸载程序仍然需要管理员权限。这是内置在卸载程序中的,无论如何都无法配置

这是有意义的,否则卸载程序无法从HKLM中删除其卸载程序密钥


无论如何,如果您真的需要破解它,您可以从
uninsxxx.dat
中删除一个标志,该标志指示安装程序是以管理员权限运行的

PrivilegesRequired()的文档说明“当设置为最低值时……卸载信息根密钥将始终为HKEY_CURRENT_USER”,我不确定,但我的解释是,如果PrivilegesRequired=最低值,则通过控制面板->程序卸载仅对安装应用程序的用户可见?这是正确的。那么,您将
PrivilegesRequired
设置为什么?PrivilegesRequired=最低,并且具有安装的文件权限:everyone full admins full可能在everyone full似乎不符合我的目的后,明确授予admins full权限是不必要的。如果我作为一个用户安装,然后尝试作为另一个用户安装,我会被询问管理员密码。它确实显示在控制面板->卸载程序的列表中。我在帮助文档ISetup.chm中没有找到“none”选项(假设这是Inno安装程序在按F1键时打开的选项)。我有Inno安装版本5.5.5,我看到5.5.6已经发布了。我需要升级吗?我没有这样做,因为我假设如果我尝试将PrivilegesRequired设置为非法值,Inno安装程序将引发错误。重新阅读我的问题,我似乎没有像我所想的那样全面地描述场景。除了我所说的,该应用程序需要安装没有管理员权限(不仅是可更新的)。如果我理解正确,在HKLM下的注册表中进行任何修改都需要管理权限?我通过使安装程序[Run]文件名“{sys}\icacls.exe”来解决需要管理权限的卸载程序;参数:“{app}\unins*.”“/T/grant”“*S-1-1-0”“:F”在我当前的设置中,它在没有管理员权限的情况下运行良好,因为PrivilegesRequired=lower会导致在HKCU下修改注册表。当以其他用户的身份运行时,这些程序将不可见,因此,不幸的是,该程序对于在“控制面板”->“卸载程序”中安装该程序的用户将可见,即使其他人卸载了该程序。这不是最理想的,因此我的原帖。是的,给HKLM写信需要行政特权。您可以像更改文件权限一样更改注册表权限。但我不会那样做的。不,HKLM是唯一的地方。你正在尝试做的是非常不寻常的,甚至可能是错误的,所以你不能期望有一些设施可以帮助你。