【发布时间】:2011-11-01 13:31:15
【问题描述】:
我在VS:File->New Project->C#->Windows Services中创建了一个windows服务 但我不知道如何运行和测试它。VS说我必须安装我的windows服务才能运行它。但我只想测试它,我不想安装它。有人能帮帮我吗???
【问题讨论】:
标签: c# c#-4.0 windows-services
我在VS:File->New Project->C#->Windows Services中创建了一个windows服务 但我不知道如何运行和测试它。VS说我必须安装我的windows服务才能运行它。但我只想测试它,我不想安装它。有人能帮帮我吗???
【问题讨论】:
标签: c# c#-4.0 windows-services
要调试您的 Windows 服务,请在您的 Main() 中添加以下内容:
if (!Environment.UserInteractive) {
// We are not in debug mode, startup as service
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyServer() };
ServiceBase.Run(ServicesToRun);
} else {
// We are in debug mode, startup as application
MyServer service = new MyServer();
service.StartService();
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
}
你的类中的以下方法MyServer:
public void StartService() {
this.OnStart(new string[0]);
}
现在按 F5 进行调试,就像任何 winform 或控制台应用程序一样。
【讨论】:
在创建 Windows 服务时,我通常将所有功能放入单独的类库中……为了测试,我创建了一个使用类库的“普通应用程序”……
在测试功能并且错误消失后,我确实构建/安装了 Windows 服务...可能存在特定于 Windows 服务的问题,例如权限等 - 这些需要相应解决(一些日志记录通常很有帮助)。
使用 VS 调试 Windows 服务与调试应用程序有点不同 - 详情请参阅 http://msdn.microsoft.com/en-us/library/7a50syb3.aspx
【讨论】:
Windows 服务并不是真正的普通可执行文件,它构建为 exe,但必须使用控制面板中的服务图标安装和启动。
安装并启动后,您可以使用 Visual Studio Debug 菜单,附加到进程并附加到服务进行调试,这不是最简单和最快的调试方式,因为如果您需要更改您必须重新构建并重新安装它的任何内容,重新启动并附加。
通常一个不错的方法是无论如何拆分和隔离类库中的服务逻辑(可能是服务业务逻辑),这也可以在控制台应用程序中使用。
此时,您创建了一个测试控制台应用程序,该应用程序调用一些方法,其行为类似于 Main 方法中的服务,然后您对其进行测试和调试。
一旦所有内容都经过测试和验证,并且您对结果感到满意,您可以复制您在 Service 类中的测试控制台应用程序的 Main 方法中放入的代码,可能是在 OnStart 方法或类似方法中,细节取决于您的具体设计。
我们这样做也是为了调试和测试 WCF 服务,这些服务在开发期间托管在测试控制台应用程序中,在生产期间托管在 Windows 服务中。
【讨论】:
您应该使用带有以下命令的 Visual Studio 命令提示符:
installutil“exe的路径”
然后转到服务(开始-> 运行-> services.msc),您将找到该服务。点击开始,你就完成了。
P.S:在 vs: 工具中调试您的服务-> 附加到进程并在列表中找到您的服务)
【讨论】:
您不能直接从 VS 调试服务。需要将调试器附加到 Windows 服务。
要做到这一点,在 VS 中执行以下操作:
结果:您可以在函数中的位置放置断点,并且您将能够调试服务执行。
【讨论】: