私の 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() }
}