2

次のように、フォルダーの変更を監視する単純なアプリケーションがあります。

            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が起動しました。サービスのプロパティは、デスクトップとのサービスの対話を許可するように構成する必要がありましたが、「対話型サービスの検出」メッセージが再度表示されます。

4

1 に答える 1

2

Windows サービスを 2 つの部分 (GUI のないサービス プロセスと、ユーザーのデスクトップで実行される別の UI アプリ) に再構築する必要があります。サービスが UI アプリと通信する方法は多数あります。これらの SO の質問から始めます。

他に方法はありません。ところで、既存のアプローチはすでに壊れています-管理者以外のユーザーとリモートデスクトップセッションの場合-彼らが望むとしても、サービスからのUIは表示されません。

于 2013-01-17T20:29:06.083 に答える