【问题标题】:How to start a new instance of Windows Service using ServiceController in C#如何在 C# 中使用 ServiceController 启动 Windows 服务的新实例
【发布时间】:2014-01-30 06:26:53
【问题描述】:

我有一个使用 Visual Studio Setup Installer 安装的 Windows 服务应用程序。Windows 服务应用程序使用 C# Socket 程序使用 Ip 和端口号从服务器读取数据并将其连续写入文本文件。IP 地址并从数据库中读取端口号。现在根据我的要求,假设客户端想要再添加一个服务器 IP 地址和端口号,在这种情况下,我如何在 Windows 服务中创建数据捕获应用程序的新实例。 这是我在 Windows Service OnStart() 方法中的代码..

protected override void OnStart(string[] args)
    {
        _thread = new Thread(DoWork);
        _thread.Start();

    }

【问题讨论】:

    标签: c# multithreading sockets windows-services


    【解决方案1】:

    不,你不需要重新启动服务..

    protected override void OnStart(string[] args)
    {
        _thread1 = new Thread(DoWork);
        _thread1.Start();
        _thread2 = new Thread(DoWork);
        _thread2.Start();
    }
    

    将一些参数传递给两个线程,然后相应地工作

    【讨论】:

    • 假设 Windows 服务应用程序仅使用一个 ip 和端口号启动,后来客户端又添加了一个 Ip 和端口..在这种情况下,_thread2 将如何启动,因为第一个线程将运行 DoWork () 方法。如何再次调用 Onstart() 来运行_thraed2?
    • 为此,您将在服务中使用一个计时器,该计时器将检查是否添加了另一个 ip...如果添加了另一个 ip,则启动一个新线程
    • 如果我将在新的 Ip 和端口号后重新启动服务。已添加..它会满足需要吗?它会同时启动两个线程吗?我想在 c# 中使用 ServiceController 重新启动服务
    • 是的,它会做同样的事情。msdn.microsoft.com/en-us/library/… 这是服务控制器阅读示例的链接
    【解决方案2】:

    您不需要为此创建第二个服务实例。只需启动另一个线程并将第二个 IP 和端口作为参数传递给它。

    【讨论】:

    • 由于 Socket 程序在启动 _thread = new Thread(DoWork); 时会持续监听 ip 和端口它永远不会出现在 Windows 服务的 OnStart(string[] args) 方法中。一旦输入了新的 Ip 和端口号,我是否需要重新启动 Windows 服务应用程序?
    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多