Delphi 如何以编程方式安排任务

Delphi 如何以编程方式安排任务,delphi,delphi-7,scheduled-tasks,Delphi,Delphi 7,Scheduled Tasks,如何使用delphi 7(如Google updater)计划任务? 我没有使用注册表,因为它被卡巴斯基防病毒检测为假警报。 我在注册表中添加的任何启动项都会被检测为特洛伊木马,因此我决定使用任务计划。下面的代码演示了如何删除和创建任务,该任务将在系统启动时以系统权限运行应用程序。它使用以下命令行: 但是,由于Windows Vista支持强制创建任务,因此我不会将其用于与Windows XP的向后兼容性,因为该标志不存在。 因此,下面的示例尝试删除任务(如果已经存在),然后创建新任务。 它执行

如何使用delphi 7(如Google updater)计划任务?
我没有使用注册表,因为它被卡巴斯基防病毒检测为假警报。

我在注册表中添加的任何启动项都会被检测为特洛伊木马,因此我决定使用任务计划。下面的代码演示了如何删除和创建任务,该任务将在系统启动时以系统权限运行应用程序。它使用以下命令行:

但是,由于Windows Vista支持强制创建任务,因此我不会将其用于与Windows XP的向后兼容性,因为该标志不存在。 因此,下面的示例尝试删除任务(如果已经存在),然后创建新任务。

它执行以下命令:

schtasks/delete/f/tn“我的工作”
schtasks/create/tn“myjob”/tr“C:\Application.exe”/sc ONSTART/ru“System”

/删除-删除任务
/f-取消确认
/创建-创建任务参数
/tn-任务的唯一名称
/tr—可执行文件的文件名
/sc-计划类型,ONSTART-启动时运行
/ru-在指定用户的权限下运行任务

代码如下:

uses
  ShellAPI;

procedure ScheduleRunAtStartup(const ATaskName: string; const AFileName: string;
  const AUserAccount: string);
begin
  ShellExecute(0, nil, 'schtasks', PChar('/delete /f /tn "' + ATaskName + '"'),
    nil, SW_HIDE);
  ShellExecute(0, nil, 'schtasks', PChar('/create /tn "' + ATaskName + '" ' +
    '/tr "' + AFileName + '" /sc ONSTART /ru "' + AUserAccount + '"'),
    nil, SW_HIDE);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ScheduleRunAtStartup('myjob', 'C:\Application.exe', 'System');
end;

在这里解决了问题,工作正常

如果有人能帮我在XP Pro上测试,我将不胜感激

procedure ScheduleRunAtStartup(const ATaskName: string; const AFileName: string;
  const GetPCName: string ; Const GetPCUser: String);
begin
  ShellExecute(0, nil, 'schtasks', PChar('/delete /f /tn "' + ATaskName + '"'),
    nil, SW_HIDE);
  ShellExecute(0, nil, 'schtasks', PChar('/create /tn "' + ATaskName + '" ' + '/tr "' + QuotedStr(AFileName) + '" /sc ONLOGON /ru "' + GetPCName+'\'+GetPCUser + '"'), nil, SW_HIDE)
end;

使用API。我链接到的MSDN文档包含许多示例。人们不禁要问,为什么您会被标记为特洛伊木马。也许这是一个真正的问题。well prog在其非常简单的应用程序中一点也不有害,但是Kasper sky如果使用RegSetValueEx Software\Microsoft\Windows\CurrentVersion\Run在代码中的任何位置设置注册表,则会将应用程序检测为特洛伊木马。任务调度程序API您有Delphi的运行示例吗?因为许多恶意软件试图向\Run键添加条目,大多数AV会将其标记为可疑行为。此外,那里的程序会减慢系统的启动速度。最好将它们添加为计划任务,并在系统空闲时运行它们,最好是这样。通过这种方式,您可以提供“更好的用户体验”。永远不要暗示你的应用程序是用户系统上唯一运行的应用程序:)完全正确!我可以为DelphiWell获得任何调度任务API工作示例吗?它成功地添加了调度任务,但不会在windows启动上运行。我希望我的(卡巴斯基防病毒)不会阻止调度任务。怎么办?我试图将“system”用户替换为当前登录的用户,但仍然失败。@user1023395:如果您想使用自己的用户帐户,还需要提供相应的密码(使用
/RP
命令开关)。如果你的帐户还没有密码,你必须分配它。(无密码用户帐户不能用于调度。)我承认我没有测试应用程序是否执行(我对调度任务没有太多经验),我只测试了它们是否创建。如果@AndriyM是对的,那么您必须拥有并知道该帐户的密码,或者修改注册表设置。有一点很清楚,没有密码保护的计划任务将是系统安全的一个大漏洞。我已经在Windows XP Professional SP3上尝试过了,但是没有密码它不起作用。这与通过“计划任务向导”创建计划任务相同。完成向导后,我收到警告消息
,新任务已创建,但可能无法运行,因为无法设置帐户信息。具体错误是:0x80070005:访问被拒绝。
我是该计算机上没有密码的管理员。所以说真的,如果你的帐户上没有设置密码,那么它就不起作用了。这对你的系统来说是非常高的安全风险。这不是答案。您应该指出为什么它是一个答案,而不是简单地删除一些代码(并且要求其他人在其他平台上测试它会使它更不是一个答案它将路径设置为参数,因此它不会在Windows 7上运行应用程序测试,因为ONLOGONThat的完全相同;如何调度触发器是一回事,另一件事是任务所有者。考虑到如果没有密码,你就可以安排一些会触发的恶意软件任务。每分钟。这就是为什么你必须在你的帐户上有密码,如果你计划一个任务,你必须知道这个密码。因此,任务计划程序不是在启动时运行你的应用程序的方式(对于你的应用程序分发),因为您的用户的帐户密码受保护,并且您必须知道此密码。/IT是一个值,仅当/RU用户在任务运行时当前登录时,该值才允许任务以交互方式运行。任务仅在用户登录时运行。Windows XP和Windows Server 2003:此选项不可用。