2012-01-02 10 views
7

Googleアップデータのようにdelphi 7を使用してタスクをスケジュールするにはどうすればよいですか?
カスペルスキーのウイルス対策ソフトウェアによって誤検出として検出されるため、レジストリを使用していません。
スタートアップアイテムとしてレジストリに追加したものはすべてトロイの木馬として検出され、タスクスケジュールを使用することに決めましたタスクをプログラムでスケジュールする方法

+3

[タスクスケジューラ](http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614(v = vs.85).aspx)APIを使用してください。私がリンクしているMSDNのドキュメントには多くの例があります。 –

+1

なぜあなたはトロイの木馬になっているのか不思議に思っています。おそらく本当の問題があります。 –

+0

よくあるprogは非常に単純なアプリケーションでは有害ではありませんが、** RegSetValueEx Software \ Microsoft \ Windows \ CurrentVersion \ Run **を使用するとKasperskyはトロイの木馬としてアプリケーションを検出します。タスクスケジューラAPI Delphiの実行例はありますか? – user1023395

答えて

6

次のコードは、システムでアプリケーションを実行するタスクを削除して作成する方法を示していますシステム特権を持つ起動。

Windows Vistaはタスクの強制作成をサポートしていますが、このフラグが存在しないWindows XPとの下位互換性のためにタスクスケジューラを使用しません。 以下の例では、タスクが既に存在する場合は削除してから新しいタスクを作成しようとしています。

それは、これらのコマンドを実行します。

でschtasks /削除/ F/TN "MYJOB"
でschtasks /作成/ TN "MYJOB"/TR "C:\ Application.exe" /皮下ONSTART/ruの "システム"

/削除 - タスク
/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; 
+0

それは正常にスケジュールされたタスクに追加しますが、Windows起動時には実行されませんでした。私の(カスペルスキーアンチウイルス)がスケジュールされたタスクをブロックしないことを願っています。何をすべきか ?私は現在のユーザーがログインしているのに "system"ユーザーを置き換えようとしましたが、それでも失敗しました。 – user1023395

+0

@ user1023395:あなた自身のユーザーアカウントを使いたい場合は、対応するパスワードも提供する必要があります( '/ RP'コマンドスイッチを使用)。アカウントにまだパスワードがない場合は、パスワードを割り当てなければなりません。 (パスワードなしのユーザーアカウントはスケジューリングでは使用できません) –

+0

私はアプリケーションが実行されているかどうかをテストしていません(私はスケジュールされたタスクで多くの経験がありません)。そして、@ AndriyMは正しいです。アカウントのパスワードを知っているか、レジストリ設定を変更する必要があります。 1つは明らかですが、このパスワード保護のないスケジュールされたタスクは、システムのセキュリティに対する大きな欠点です。 – TLama

-1

は、ここで問題を考え出しいずれかがXPのPROの上に私のためにテストすることができれば当然のBしまう

ProをWindows 7でテストされ正常に動作します

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; 
+0

私はWindows XP Professional SP3でそれを試しましたが、パスワードなしでは動作しません。スケジュールされたタスクウィザードを使用してスケジュールされたタスクを作成する場合と同じです。私がウィザードを終了したら、警告メッセージ「新しいタスクが作成されましたが、アカウント情報を設定できなかったため実行できません。具体的なエラーは次のとおりです。0x80070005:アクセスが拒否されました。そして、私はそのマシンにパスワードのない管理者です。あなたのアカウントにパスワードが設定されていないと、実際には機能しません。これは、システムにとって非常に高いセキュリティリスクです。 – TLama

+2

これは答えではありません。 *なぜそれが答えであるかを示すべきであり、他のプラットフォームでそれをテストするように他の人に質問しても*それ以上の*答えにならないようにする。 – casperOne

+0

quotedstrなし(AFileName) Windows 7上でアプリケーションテストを実行しないでしょう@TLAMA ONSTARTをONLOGONに置き換えてください – user1023395

関連する問題