gpt4 book ai didi

c# - 调试 Windows 服务 - 防止无法启动服务

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:49 24 4
gpt4 key购买 nike

尝试调试 Windows 服务(删除了安装、编码、安装、编码等的需要),以为我找到了解决方案

class Program
{
static void Main(string[]args)
{
ClientService service = new ClientService();

if (args.Length > 0)
{
Task.Factory.StartNew(service.Main, TaskCreationOptions.LongRunning);

Console.WriteLine("running...");
Console.ReadLine();

}
else
{
#if (!DEBUG)
ServiceBase[]ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
ServiceBase.Run(ServicesToRun);
# else
ServiceBase.Run(service);
}
# endif
}
}

但是我仍然收到错误:

Cannot start service from the command line or debugger. A windows Service must first be installed(using installutil.exe) and then started with the ServerExplorer, Windows Services Administrative tool or the NET START command.

enter image description here

有什么我需要更改以避免出现提示的想法吗?

最佳答案

您已从 Running Windows Service Application without installing it 复制代码, 但它被设计破坏了,你错误地改变了它。

其背后的想法是,您有一个 ServiceBase 继承类,其中包含一个执行实际服务逻辑的公共(public)方法:

public class MyService : ServiceBase
{
public void DoTheServiceLogic()
{
// Does its thing
}

public override void OnStart(...)
{
DoTheServiceLogic();
}
}

然后在你的应用程序中,你可以这样启动它:

class Program
{
static void Main(string[] args)
{
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new MyService()
};

ServiceBase.Run(ServicesToRun);
}
}

这提供了一个可作为 Windows 服务安装的可执行应用程序。

但是您不想安装服务然后附加 Visual Studio 来调试它;这是一个非常低效的工作流程。

所以你发现的代码试图做的,就像网上找到的许多方法一样,是用特定的命令行标志启动应用程序,比如 /debug,然后调用公共(public)方法服务逻辑 - 实际上没有将其作为 Windows 服务运行

可以这样实现:

class Program
{
static void Main(string[] args)
{

if (args.Length == 1 && args[0] == "/debug")
{
// Run as a Console Application
new MyService().DoTheServiceLogic();
}
else
{
// Run as a Windows Service
ServiceBase[] ServicesToRun = new ServiceBase[]
{
new MyService()
};

ServiceBase.Run(ServicesToRun);
}
}
}

现在您可以指示 Visual Studio 在调试应用程序时传递 /debug 标志,如 MSDN: How to: Set Start Options for Application Debugging 中所述。 .

这稍微好一点,但仍然是一个糟糕的方法。您应该完全提取服务逻辑,并编写单元测试以便能够测试您的逻辑,而不必在应用程序中运行它,更不用说 Windows 服务了。

关于c# - 调试 Windows 服务 - 防止无法启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649032/

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