-1

私の C# アプリケーションはバッチ スクリプトを作成し、プロセスを生成してこのスクリプトを実行します。

このアプリケーションは、Windows サービスとして実行する必要があります。さらに、コマンド ライン パラメーターを使用して、これを 1 回だけ実行して終了することを示すスタンドアロン モードも必要です。

問題は、スタンドアロン バージョンを実行すると、アプリ (ランチャー) の複数のインスタンスが生成されることです。しかし、Visual Studio 内から実行すると、動作します。つまり、一度実行して終了します。

誰かが何が起こっているのか理解するのを手伝ってくれますか?

これが main() を持つクラスです

static class Launcher
{
    static void Main(String[] args)
    {
        if(args[0] == "/standalone")
        {
            using(MyService service = new MyService())
            {
                service.StartService();
                service.StopService();
            }
        }
        else
        {
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
            { new MyService() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
    }
}

MyService クラス:

public partial class MyService : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        Process p = new Process();
        p.StartInfo.FileName = "C:\abc.bat";
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        p.Start();
    }

    protected override void OnStop()
    {
        // Log something
    }

    public void StartService()
    { this.OnStart(null); }

    public void StopService()
    { this.OnStop() }
}
4

1 に答える 1

1

複数のインスタンスがある場合は、process.start が複数回呼び出されています。ログを書き出して、process.start が複数回呼び出されている理由を追跡することをお勧めします。

于 2013-01-15T19:46:59.403 に答える