Inno Setup,应用程序开机自启动

12

对于Inno Setup,我想创建一个复选框任务,使得当Windows启动时,我的应用程序可以自动启动。我的代码如下:

另外,如何编写下面的代码 - DO_Set_AutoStart_WhenWindowsStart() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

[Tasks]
Name: "StartMenuEntry" ; Description: "Start my app when Windows starts" ; GroupDescription: "Windows Startup"; MinVersion: 4,4;

[code]

//Do Additional Task - Auto Start when Windows Start 

function NextButtonClick(CurPageID: Integer): Boolean;
var
  Index: Integer;
begin
  Result := True;
  if CurPageID = wpSelectTasks then
  begin
    Index := WizardForm.TasksList.Items.IndexOf('Start my app when Windows starts');
    if Index <> -1 then
    begin
      if WizardForm.TasksList.Checked[Index] then
        MsgBox('First task has been checked.', mbInformation, MB_OK)
        DO_Set_AutoStart_WhenWindowsStart();
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      else
        MsgBox('First task has NOT been checked.', mbInformation, MB_OK);
    end;
  end;
end;

1个回答

22

您无需使用[code]部分来添加自动启动应用程序。

有不同的方法可以实现此目的,例如

[icons]
Name: "{userstartup}\My Program"; Filename: "{app}\MyProg.exe"; Tasks:StartMenuEntry;
Name: "{commonstartup}\My Program"; Filename: "{app}\MyProg.exe"; Tasks:StartMenuEntry;

如果不明显,{userstartup}和{commonstartup}之间的区别在于,{userstartup}会影响当前用户的启动菜单条目,而{commonstartup}则会影响目标计算机上所有用户。


编辑

您也可以使用注册表来启动应用程序。我添加这个是因为OP在评论中提到所描述的方法在Windows 8上不起作用(因为缺乏开始菜单,我忘了)。我手头没有Windows 8来测试,所以您需要自行测试这是否适用于Windows 8。

注册表中的运行键自WinXP以来就存在,因此您可以通过添加类似以下内容的东西来配置Windows从安装程序自动运行程序:

[Registry]
;current user only
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "MyProgram"; ValueData: "{app}\MyProg.exe"; Tasks:AutoRunRegistry;

;any user
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "MyProgram"; ValueData: "{app}\MyProg.exe"; Tasks:AutoRunRegistry;

不要错过,我还在示例中将Tasks参数更改为AutoRunRegistry


1
你应该只使用其中之一,而不是两者都用。你的选择通常应取决于你设置了什么PrivilegesRequired - Miral
如何添加复选框,让用户选择是否将程序添加到启动项? - Archisman Panigrahi
@ArchismanPanigrahi 如果你想的话,你可以提出自己的问题,评论不是用来提问或回答问题的。 - jachguate
1
只是一个更新,我遇到了一个错误 Directive or parameter "Tasks" expression error: Parameter "Tasks" includes an unknown task,所以我尝试删除语法,只使用 Name: "{commonstartup}\My Program"; Filename: "{app}\MyProg.exe",在Win10上使用Inno版本6.0.5对我有效。 - Corey
1
答案包含一个StartMenuEntry任务依赖,因为问题有一个[Tasks] Name: "StartMenuEntry"部分。当然,这只适用于原始发布者,如果您希望注册表条目始终运行,则删除依赖关系是正确的。如果您希望它根据用户选择运行,则应更改要依赖的task的名称。 - jachguate
显示剩余15条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接