gpt4 book ai didi

c# - Windows服务——封装现有功能

转载 作者:可可西里 更新时间:2023-11-01 11:12:54 25 4
gpt4 key购买 nike

我们正在运行一个用 Winforms C# (.net framework 4.0) 开发的客户端-服务器应用程序,它具有以下组件

  1. 客户端(Windows 应用程序)
  2. 服务器(控制台应用程序)

我们正在研究将服务器(控制台应用程序)实现为 Windows 服务的可能性。

首先让我概述一下我们决定采取的方法

  1. 创建一个windows服务项目(使用windows服务项目模板)
  2. 将服务器功能集成/封装到 Windows 服务中

只有一个问题需要我们回答。这里的尝试是让这个问题尽可能的客观,这样才能归类为真题。

是否需要将Server转为dll工程?

或者能否在windows服务工程中给server exe文件一个引用?

个人认为第二种方案不可行。但我想知道我是否遗漏了什么。

提前致谢

罗米

最佳答案

您可以在您的服务项目中添加 exe 作为引用。无论如何,exe只是一个程序集。也许你必须将一些类设置为公共(public),但如果你创建一个 dll 也会发生同样的情况。我通常使用另一种技巧。我从一个服务项目开始,并将其更改为充当控制台应用程序:

属性->应用->输出类型:控制台应用

然后我在main里面写这样的东西:

        if (Environment.UserInteractive)
{
log.Info("Starting as a console...");
// call my service runner
}
else{
log.Info("Starting as a service...");
log.Info(this.ServiceDisplayName);
log.Info(this.ServiceDescription);
ServiceBase[] servicesToRun = new ServiceBase[]
{
new MyServiceImpl();
};
try
{
ServiceBase.Run(servicesToRun);
}
catch (Exception e)
{
log.Fatal("A fatal error occurred while running.", e);
throw;
}
}

通过这种策略,我有一个 exe,它在交互式运行时表现得像一个控制台,但可以安装在服务控制管理器中。也许类似的重构会对您的代码有所帮助。

关于c# - Windows服务——封装现有功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21331418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com