如何为管理员用户创建“仅供我”安装?

时间:2011-07-20 23:10:40

标签: conditional windows-xp admin inno-setup

当我以管理员用户身份运行安装脚本时,它会将开始菜单条目放在“所有用户”配置文件中。我希望开始菜单条目放在当前用户的配置文件中(如果他们是管理员用户)并选择安装“Just for me”。

我可以通过为#define选择两个值之一来实现,但我无法弄清楚如何创建有条件包含的常量。我已经有一个[Code]部分例程,如果选择了“Just for me”安装,则返回true。这是场景:

#define StartMenuLocation = "{somegroup}"     ; check JustForMeInstall
#define StartMenuLocation = "{anothergroup}"  ; check AllUsersInstall
...

[Icons]
Name: "{#StartMenuLocation}\{#MyAppName}" ; Filename: "{app}\{#ExeName}" ; parameters: "{#CommandArgs}" ; comment: "Starts {#MyAppName} {#MyAppVersion}"
...

[Code]

function JustMeInstall  : boolean ;
begin
Result := (InstallationType = itJustMe) ;
end ;

function AllUsersInstall: boolean ;
begin
Result := (InstallationType = itAllUsers) ;
end ;

其中不支持#defines的“check”参数,当然也会被忽略。

真的有两个问题:

  • 我用什么常量来定义开始菜单文件夹的位置。 - InnoSetup提供{group},但此文件夹是在All Users配置文件下创建的,除非安装应用程序的用户没有管理权限,在这种情况下,它是在用户的配置文件中创建的。我想要一个当前用户开始菜单文件夹的常量,该文件夹在该用户以管理员用户身份登录时有效。

  • 如何实现上面显示的条件#defines(无论如何都是这个问题之外的一般兴趣)。

1 个答案:

答案 0 :(得分:4)

您将PrivilegesRequired指令设置为最低,这意味着Inno将仅为当前用户安装,无论它是否以管理员身份运行。 (这也意味着您无法在系统位置安装任何内容。

请注意,这不能在运行时设置,因此如果要允许这两种类型,则需要创建两个设置。

如果您只想更改图标的位置,可以有条件地使用{userprograms}\{groupname}{commonprograms}\{groupname}