2

我在 C# (4.0) 中创建了一个 Windows 服务,并尝试在命令行中使用 installutil 工具安装它。但是我得到一个例外。我设法找出我的代码的哪一部分导致了异常 - 使用了一些糟糕的日志记录,但无论如何 - 但现在我想了解原因。所以我想做的是调试我的 Windows 服务的安装。

我知道如何调试服务本身,但是在这里,我想在Installer.Install(IDictionary stateSaver)服务中调试我的方法的内容。

我试图将调试器附加到 cmd.exe 进程,但它显然不起作用。我也在考虑将调试器附加到 installutil 进程,但我不知道如何做到这一点。

我看过这篇文章:如何调试正在安装的 Windows 服务?还有其他几个,但在这种情况下,由于某种原因,这个人似乎已经在 services.msc 中提供了他的服务,这不是我的情况。

我怎样才能做到这一点?

4

2 回答 2

12

您可以Debugger.Break();在安装程序代码中添加一条语句,它应该会为您启动调试器。

于 2012-02-29T11:47:56.697 回答
1

如果上述方法不起作用,我发现这个过程也有效。基本上,您在调试模式下编译并安装服务(我通过命令行使用 installutil.exe)。在代码中,您会弹出一个带有进程 ID 的消息框。启动第二个工作室实例,将其附加到该进程并进行调试。消息框将其暂停以允许设置。进程 ID 并不重要,它的名称为 InstallUtil.exe。我通常在消息框后面放一个 Debug.Break() 以保证它进入代码。

using System.Windows.Forms;
using System.Diagnostics;

...

#if DEBUG 
int processId = Process.GetCurrentProcess().Id;
string message = string.Format("Please attach the debugger (elevated on Vista or Win 7) to process [{0}].", processId);
MessageBox.Show(message, "Debug");
#endif

....

如何调试自定义 Windows 服务的安装

于 2015-09-23T21:45:27.090 回答