当我以管理员用户身份运行安装脚本时,它会将开始菜单条目放在“所有用户”配置文件中。我希望开始菜单条目放在当前用户的配置文件中(如果他们是管理员用户)并选择安装“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(无论如何都是这个问题之外的一般兴趣)。
答案 0 :(得分:4)
您将PrivilegesRequired指令设置为最低,这意味着Inno将仅为当前用户安装,无论它是否以管理员身份运行。 (这也意味着您无法在系统位置安装任何内容。
请注意,这不能在运行时设置,因此如果要允许这两种类型,则需要创建两个设置。
如果您只想更改图标的位置,可以有条件地使用{userprograms}\{groupname}
或{commonprograms}\{groupname}