5

から私は、私は、Windowsを持っているための最も簡単な方法は、例えば、すべての(定期的に実行するために自分のアプリケーションをスケジュールされて何のVisual Studioのセットアップウィザードのプロジェクトを使用して、2008年Vistaの[タスクのスケジュール設定

をC#アプリケーションを展開しています8時間)?このスケジューリングがエンドユーザーのセットアップを簡単にするためにアプリケーションのインストール中に行われるのが好きです。

ありがとうございます!

答えて

0

スケジュールされたタスクはあなたの方法です。 scriptでタスクを設定する方法については、このページをご覧ください。

+0

次に、このスクリプトをインストーラにバンドルし、他のプログラムの実行スケジュールを設定した後で削除する必要があります。セットアップウィザードでこれを行うのは単なる良い方法ではありませんか? – mrduclaw

+0

あなたはスクリプトでできることができるセットアップコンポーネントの何かを行うことができます。 – rerun

10

これは私のためのものです。セットアッププロジェクトからタスクをスケジュールするための完全なドキュメントです。

デプロイメントプロジェクトを作成したら、Custom Actionsを使用してタスクをスケジュールする必要があります。 Walkthrough: Creating a Custom Action

注:0120-インストール手順でカスタム作業を行う予定がない場合でも、ウォークスルーでインストールノードにプライマリ出力を追加するように要求されます。 これは重要なので、私のように無視しないでください。インストーラクラスは、このステップでいくつかの状態管理を行い、実行する必要があります。

次の手順では、インストールディレクトリをカスタムアクションに渡します。これはCustomActionData propertyで行われます。私はコミット・ノードのために/DIR="[TARGETDIR]\"と入力しました(コミット・ステップ中に私の仕事をスケジュールします)。 MSDN: CustomActionData Property

最後に、タスクスケジューリングAPIにアクセスするか、Process.Startを使用してschtasks.exeに電話する必要があります。 APIはよりシームレスで堅牢なエクスペリエンスを提供しますが、私はコマンドラインが便利なのでschtasksルートを使いました。

私は最終的に結局結んだコードです。インストール、コミット、およびアンインストールのためのカスタムアクションとして登録しました。

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Configuration.Install; 
using System.Linq; 
using System.Security.Permissions; 
using System.Diagnostics; 
using System.IO; 


namespace MyApp 
{ 
    [RunInstaller(true)] 
    public partial class ScheduleTask : System.Configuration.Install.Installer 
    { 
     public ScheduleTask() 
     { 
      InitializeComponent(); 
     } 

     [SecurityPermission(SecurityAction.Demand)] 
     public override void Commit(IDictionary savedState) 
     { 
      base.Commit(savedState); 

      RemoveScheduledTask(); 

      string installationPath = Context.Parameters["DIR"] ?? ""; 
      //Without the replace, results in c:\path\\MyApp.exe 
      string executablePath = Path.Combine(installationPath, "MyApp.exe").Replace("\\\\", "\\"); 

      Process scheduler = Process.Start("schtasks.exe",string.Format("/Create /RU SYSTEM /SC HOURLY /MO 2 /TN \"MyApp\" /TR \"\\\"{0}\\\"\" /st 00:00", executablePath)); 
      scheduler.WaitForExit(); 
     } 

     [SecurityPermission(SecurityAction.Demand)] 
     public override void Uninstall(IDictionary savedState) 
     { 
      base.Uninstall(savedState); 
      RemoveScheduledTask(); 
     } 

     private void RemoveScheduledTask() { 
      Process scheduler = Process.Start("schtasks.exe", "/Delete /TN \"MyApp\" /F"); 
      scheduler.WaitForExit(); 
     } 
    } 
} 
+0

スコア!ニースの答え、半分私の一日を保存;-) –

関連する問題