如何在运行安装程序时为所有用户创建“开始”菜单项,其中PrivilegesRequired =最低为管理员

时间:2017-12-04 13:38:01

标签: inno-setup

Inno Setup文档说明如下:

  

{group}       用户在安装程序的选择开始菜单文件夹向导页面上选择的“开始菜单”文件夹的路径。此文件夹是在所有用户配置文件下创建的,除非安装该应用程序的用户没有管理权限,在这种情况下,它是在用户的配置文件中创建的。*

当我使用PrivilegesRequired=admin(即默认值)时,会为C:\ProgramData\Microsoft\Windows\Start Menu\Programs中的所有用户创建开始菜单项。

当我使用PrivilegesRequired=lowest,但右键单击“以管理员身份运行”运行安装程序时,仅为C:\Users\admin-user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs中的管理员用户创建开始菜单项。即使当前用户是管理员,也会发生这种情况。

使用右键单击提升时,如何为所有用户创建开始菜单项?在这种情况下,安装程序会为C:\Program Files\中的所有用户安装程序文件。所以我想开始菜单项也适合所有用户。

2 个答案:

答案 0 :(得分:1)

根据安装程序的提升状态,使用scripted constant动态更改开始菜单根路径。

您必须使用WinAPI(例如SHGetFolderPath)来检索公共 Start 菜单文件夹的路径,因为{commonprograms}实际返回{userprograms},如果{{ 1}},即使安装程序实际上正在升级。

PrivilegesRequired=lowest
[Icons]
Name: "{code:GetMenuRootPath}\{groupname}\My Program"; Filename: "{app}\MyProg.exe"

代码适用于Unicode version of Inno Setup

尽管请注意,在“开始”菜单中使用组是违反Windows 8及更高版本的Windows指南。

答案 1 :(得分:1)

您可以使用(已弃用且现在未记录的)值PrivilegesRequired=none来使Inno适应是否使用管理员权限运行,包括相应地重定向“开始”菜单条目。

然而这个设置被弃用的原因是因为整个概念有点傻。大多数应用程序应设计为需要管理员权限才能安装(因为通常非管理员的人不应安装软件)。

如果您最终安装了作为管理员和普通用户同时安装的应用程序,那么您将遇到某些用户将看到已安装该应用程序的两个副本并且不知道使用哪个副本的情况。此外,管理员可能会升级他们安装的那个,认为所有用户都会看到它,但同时一些用户仍在使用旧版本。

我强烈建议你放弃让没有特权的用户安装你的应用程序并坚持使用PrivilegesRequired=admin的想法,或者如果你真的想要允许,那么PrivilegesRequired=lowest

如果你使用PrivilegesRequired=lowest,那么也可以在{userpf}中使用DefaultDirName,这样如果有人错误地以管理员身份运行它,它就不会安装到Program Files。