Inno Setup 脚本实例——选择安装:当前用户、所有用户

代码:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

; 使用预定义变量,便于维护
#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}/{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=D:/Program Files/Inno Setup 5/license.txt
OutputBaseFilename=setup
Compression=lzma
SolidCompression=true

[Languages]
Name: english; MessagesFile: compilerefault.isl

[CustomMessages]
; 使用自定义信息,便于维护或多国语言
cmSelectUser=Install for:
cmAllUsers=&All users
cmCurrentUserOnly=Current &user only

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}
; 把“选择安装给谁”选项作为附加任务来处理
; 脚本函数 ShowSelectUserTask 用于判断是否需要显示“选择安装”选项,比如 98 下不显示该选择,细节参见相应脚本函数
Name: forallusers; Description: {cm:cmAllUsers}; GroupDescription: {cm:cmSelectUser}; Flags: exclusive; Check: ShowSelectUserTask
Name: forcurrentuser; Description: {cm:cmCurrentUserOnly}; GroupDescription: {cm:cmSelectUser}; Flags: exclusive unchecked; Check: ShowSelectUserTask

[Files]
Source: D:/Program Files/Inno Setup 5/Examples/MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: D:/Program Files/Inno Setup 5/license.txt; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Dirs]
; “选择安装给谁”选项的应用示例,脚本函数 CheckInstallFor 用于判断是选择了 安装给所有用户 还是 安装给当前用户,由此决定安装目标目录是 所有用户 还是 当前用户
Name: {commonappdata}/{#MyAppName}/Data; Check: CheckInstallFor('forallusers')
Name: {userappdata}/{#MyAppName}/Data; Check: CheckInstallFor('forcurrentuser')

[Icons]
Name: {group}/{#MyAppName}; Filename: {app}/{#MyAppExeName}
Name: {group}/{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
; “选择安装给谁”选项的应用示例,请参考[Dirs]示例注释
Name: {commondesktop}/{#MyAppName}; Filename: {app}/{#MyAppExeName}; Tasks: desktopicon; Check: CheckInstallFor('forallusers')
Name: {userdesktop}/{#MyAppName}; Filename: {app}/{#MyAppExeName}; Tasks: desktopicon; Check: CheckInstallFor('forcurrentuser')
; 注意,我在测试过程中,发现{commonappdata}/Microsoft/Internet Explorer/Quick Launch/{#MyAppName}不起作用,因此快速启动快捷键只安装给当前用户
Name: {userappdata}/Microsoft/Internet Explorer/Quick Launch/{#MyAppName}; Filename: {app}/{#MyAppExeName}; Tasks: quicklaunchicon

[Registry]
; “选择安装给谁”选项的应用示例,请参考[Dirs]示例注释
; 这两行是卸载时候删除相应注册表内容
Root: HKLM; Subkey: Software/{#MyAppName}; Flags: uninsdeletekey dontcreatekey; ValueType: none; Check: CheckInstallFor('forallusers')
Root: HKCU; Subkey: Software/{#MyAppName}; Flags: uninsdeletekey dontcreatekey; ValueType: none; Check: CheckInstallFor('forcurrentuser')
; 这两行是安装时候在注册表内留下相应键值,来标识安装过程中的“选择安装”选项
Root: HKLM; Subkey: Software/{#MyAppName}; ValueType: string; ValueName: InstallFlag; ValueData: ForAllUser; Check: CheckInstallFor('forallusers')
Root: HKCU; Subkey: Software/{#MyAppName}; ValueType: string; ValueName: InstallFlag; ValueData: ForCurrentUser; Check: CheckInstallFor('forcurrentuser')

[UninstallDelete]
Name: {app}/MyProg.exe; Type: files
Name: {app}/license.txt; Type: files
Name: {app}; Type: dirifempty
; “选择安装给谁”选项的应用示例,请参考[Dirs]示例注释
Name: {commonappdata}/{#MyAppName}/Data; Type: dirifempty; Check: CheckInstallFor('forallusers')
Name: {userappdata}/{#MyAppName}/Data; Type: dirifempty; Check: CheckInstallFor('forcurrentuser')

[Run]
Filename: {app}/{#MyAppExeName}; Description: {cmaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent

[Code]

// 是否显示“选择安装给谁”选项,这里我认为显示的条件是:NT 平台,且为 Amdin 用户
function ShowSelectUserTask: Boolean;
begin
   Result := UsingWinNT and IsAdminLoggedOn;
end;

// 判断“选择安装给谁”选项值
function CheckInstallFor(Task: string): Boolean;
begin
   if UsingWinNT then
   begin
Result := IsTaskSelected(Task);
if Result and (Task = 'forallusers') then
   Result := ShowSelectUserTask;
   end
   else
Result := Task = 'forallusers';
end;

// 安装向导页面改变事件
procedure CurPageChanged(CurPageID: Integer);
var
   I: Integer;
   WinVer: TWindowsVersion;
begin
   if (CurPageID = wpSelectTasks) then
   begin // 当前页为 附加任务 选择页
GetWindowsVersionEx(WinVer);
if UsingWinNT and (not IsAdminLoggedOn or (WinVer.Major > 5)) then
begin // NT 平台,且 不是 Admin 用户 或 是 Vista 系统
   for I := 0 to WizardForm.TasksList.Items.Count - 1 do
   begin
       if WizardForm.TasksList.ItemCaption = ExpandConstant('{cm:cmCurrentUserOnly}') then
      WizardForm.TasksList.Checked := True; // 默认选择为 安装给当前用户
   end;
end;
   end;
end;

// 安装步骤改变事件
procedure CurStepChanged(CurStep: TSetupStep);
var
   S: string;
   ResultCode: Integer;
begin
   if CurStep = ssInstall then
   begin // 安装将要开始执行
// 这里可以根据自己需要,执行特定代码。我这里只是显示一下选项值
if IsTaskSelected('forallusers') then
   MsgBox(ExpandConstant('{cm:cmSelectUser}') + ' ' + ExpandConstant('{cm:cmCurrentUserOnly}'), mbInformation, MB_OK)
else
   MsgBox(ExpandConstant('{cm:cmSelectUser}') + ' ' + ExpandConstant('{cm:cmAllUsers}'), mbInformation, MB_OK);
   end;
end;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值