から私は、私は、Windowsを持っているための最も簡単な方法は、例えば、すべての(定期的に実行するために自分のアプリケーションをスケジュールされて何のVisual Studioのセットアップウィザードのプロジェクトを使用して、2008年Vistaの[タスクのスケジュール設定
をC#アプリケーションを展開しています8時間)?このスケジューリングがエンドユーザーのセットアップを簡単にするためにアプリケーションのインストール中に行われるのが好きです。
ありがとうございます!
から私は、私は、Windowsを持っているための最も簡単な方法は、例えば、すべての(定期的に実行するために自分のアプリケーションをスケジュールされて何のVisual Studioのセットアップウィザードのプロジェクトを使用して、2008年Vistaの[タスクのスケジュール設定
をC#アプリケーションを展開しています8時間)?このスケジューリングがエンドユーザーのセットアップを簡単にするためにアプリケーションのインストール中に行われるのが好きです。
ありがとうございます!
スケジュールされたタスクはあなたの方法です。 scriptでタスクを設定する方法については、このページをご覧ください。
これは私のためのものです。セットアッププロジェクトからタスクをスケジュールするための完全なドキュメントです。
デプロイメントプロジェクトを作成したら、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();
}
}
}
スコア!ニースの答え、半分私の一日を保存;-) –
次に、このスクリプトをインストーラにバンドルし、他のプログラムの実行スケジュールを設定した後で削除する必要があります。セットアップウィザードでこれを行うのは単なる良い方法ではありませんか? – mrduclaw
あなたはスクリプトでできることができるセットアップコンポーネントの何かを行うことができます。 – rerun