【问题标题】:Calling Process.Start from a Windows service spawning multiple instances从产生多个实例的 Windows 服务调用 Process.Start
【发布时间】:2013-01-15 19:39:02
【问题描述】:

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

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

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

【问题讨论】:

  • 您能提供更多信息吗?当您说“应用程序的多个实例”时,您是指您的服务/控制台应用程序,还是它产生的?您的问题不清楚哪个是哪个。你能显示处理命令行标志(运行一次并退出标志)的代码吗?
  • 能否贴出相关代码?
  • 感谢您的回复。我已经更新了代码结构。
  • 我编译了你的代码,它只为我运行了一次!!!

标签: c# windows-services


【解决方案1】:

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

【讨论】:

  • 记录帮助。实际问题是原始开发人员的逻辑错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多