从生成多个实例的Windows服务调用Process.Start

时间:2013-01-15 19:39:03

标签: c# windows-services

我的C#应用​​程序创建一个批处理脚本,然后生成一个Process来执行这个脚本。

此应用程序需要作为Windows服务运行。此外,我还需要一个独立模式,我将通过命令行参数指示这应该只运行一次并退出。

问题在于,当我运行独立版本时,我可以看到该应用程序(Launcher)的多个实例正在生成。但是如果我从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() }
}

1 个答案:

答案 0 :(得分:1)

如果有多个实例,则会调用process.start一次。我建议您写出日志并跟踪多次调用process.start的原因