【发布时间】:2017-03-07 21:32:17
【问题描述】:
尝试调试一个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
}
}
但是我仍然收到错误:
无法从命令行或调试器启动服务。必须首先安装 Windows 服务(使用 installutil.exe),然后使用 ServerExplorer、Windows 服务管理工具或 NET START 命令启动。
任何想法我需要更改以避免提示?
【问题讨论】:
-
在项目的调试属性选项卡中传递命令行参数。任何参数都可以。不要在不理解代码的情况下复制粘贴代码。
-
当您在谷歌上搜索该错误消息文本时,谷歌结果是什么意思?
-
@David 此代码是众多实例之一,其中不是通过
ServiceBase.Run(),服务类实际上是通过用户代码启动的,以便在不安装服务的情况下调试服务。如果args.Length > 0,此代码会执行此操作。这就像谷歌第一次点击“C# debug windows service without installed”。完全不需要安装 Windows 服务来调试它的逻辑。 -
@CodeCaster:有趣,我从未见过使用过这种方法。说得通。我想我从来没有遇到过这个问题,因为我的服务代码一直是独立可运行/可测试的,而无需运行服务主机本身。 (我上次遇到此错误消息是很久以前在维护遗留系统时,该过程是无论如何都要在开发机器上安装和运行服务。)
-
@David 哦,当然,如果你真的需要这个,那你就错了。
标签: c#