次のように、フォルダーの変更を監視する単純なアプリケーションがあります。
private void Form1_Load(object sender, EventArgs e)
> {
> FileSystemWatcher w = new FileSystemWatcher();
> w.Path = @"C:\temp";
> w.Changed += new FileSystemEventHandler(OnChanged);
> w.Created += new FileSystemEventHandler(OnChanged);
> w.Deleted += new FileSystemEventHandler(OnChanged);
> w.Renamed += new RenamedEventHandler(OnChanged);
> // Begin watching.
> w.EnableRaisingEvents = true;
} // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. MessageBox.Show("File: " + e.FullPath + " " + e.ChangeType + Path.GetFileName(e.FullPath)); }
コマンドプロンプトからサービスと同じものを追加しました
sc create <service name> binPath= <path of the exe file>
これにより、サービスにexeが追加され、レジストリにもエントリが作成されました。しかし、私がサービスを開始しようとしたとき
sc start <service name>
「Interactive Service Detection」メッセージが表示されました。
このメッセージが表示されないようにして、サービスを開始したい。これもc#で行う必要がありますが、cmdで行うことについて誰かが考えている場合は、バッチファイルとして追加して同じことを実行できます。
編集私
@Sevaが示唆したように、私が望むexeを呼び出すサービスを作成しました。サービスの開始時にexeを開始する次のコードを作成しました。
protected override void OnStart(string[] args)
{
base.OnStart(args);
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
p.StartInfo.CreateNoWindow = false;
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.StartInfo.WorkingDirectory = @"<my exe path>";
p.StartInfo.FileName = "<myexe.exe>";
p.StartInfo.Arguments = @"<my exe path>";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.WaitForExit();
base.Stop();
}
サービスを正常にインストールしましたが、開始時に exe を開始していません。
編集Ⅱ
exeが起動しました。サービスのプロパティは、デスクトップとのサービスの対話を許可するように構成する必要がありましたが、「対話型サービスの検出」メッセージが再度表示されます。