> 文章列表 > Inno Setup实现软件开机自动运行的两种方法

Inno Setup实现软件开机自动运行的两种方法

Inno Setup实现软件开机自动运行的两种方法

Inno Setup实现软件开机自动启动的两种方法

在许多情况下,我们希望我们的软件能够在操作系统启动时自动启动。对于 Windows 操作系统,可以通过将程序添加到启动组或在注册表的 Run 项中创建值来实现此目的。
有两种不同的方法可以做到这一点:

方法一:在启动组中创建快捷方式
首先,在 [Icons] 区段中创建一个条目,并将其安装到 {autostartup} 目录中,这将在启动组中创建一个快捷方式。在这个条目中,将 Name 设置为你希望在启动组中显示的名称,将 Filename 设置为要运行的程序的完整路径,例如:
[Icons]
Name: "{autostartup}\\My Program"; Filename: "{app}\\MyProg.exe"
当用户登录到 Windows 操作系统时,启动组中的所有快捷方式都会被自动运行。因此,在添加到启动组的快捷方式中指定的程序将在系统启动时自动运行。
这种方法的优点:
实现简单,只需要在 Inno Setup 脚本中添加一个快捷方式即可。
支持 Windows 操作系统的所有版本。
缺点:
如果用户手动从启动组中删除了快捷方式,则程序将不再自动启动。
由于启动组中包含的快捷方式很多,这可能会导致启动时间变慢。

方法二:在注册表的 Run 项中创建值
在 [Registry] 区段中创建一个条目,并将其安装到 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER 中的 Run 项中。在这个条目中,将 Subkey 设置为 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",将 ValueType 设置为 string,将 ValueName 设置为要创建的键的名称,将 ValueData 设置为要运行的程序的完整路径,例如:
[Registry]
Root: HKA; Subkey: "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; ValueType: string; ValueName: "MyProg"; ValueData: """{app}\\MyProg.exe"""; Flags: uninsdeletevalue
当用户登录到 Windows 操作系统时,系统将自动在注册表的 Run 项中查找所有键,并在找到的每个键中查找 ValueName,如果找到则会自动运行 ValueData 中指定的程序。因此,添加到注册表的 Run 项中的键将在系统启动时自动运行。
这种方式的优点:
在注册表中创建键的过程更加安全和稳定。相比在启动组中创建运行快捷方式而言,这种方式不用担心用户不小心删除了启动快捷方式。
缺点:写入注册表的操作,必须使用管理员身份运行安装程序。

手动设置
如果需要让用户在安装程序的过程中手动设置程序是否要开机自动启动,可以通过在 Inno Setup 脚本中添加一个自定义任务来实现询问用户是否设置开机自动启动,如果用户选中了该任务,则创建快捷方式。
首先,在 [Tasks] 节点下添加一个自定义任务,用于询问用户是否要设置开机自动启动:
[Tasks]
Name: "startupicon"; Description: "When the system starts up automatically run this program"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
接下来,在 [Icons] 节点中添加一个条件语句,只有当用户选择了该任务时才创建快捷方式:
[Icons]
Name: "{autostartup}\\My Program"; Filename: "{app}\\MyProg.exe";  ;  Tasks: startupicon