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



我在C#(4.0)中创建了一个Windows服务,并尝试在命令行中使用installutil工具进行安装。不过我有个例外。我设法找出了我的代码中导致异常的部分——使用了一些糟糕的日志记录,但现在我想知道为什么。所以我想做的是调试我的Windows服务的安装。

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

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

我看了一下这篇文章:如何调试正在安装的windows服务?还有其他几个,但在这种情况下,出于某种原因,这家伙似乎已经在services.msc中提供了服务,而我的情况并非如此。

我怎样才能做到这一点?

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

如果以上不起作用,我发现这个过程也起作用。基本上,您可以在调试模式下编译并安装服务(我通过命令行使用installutil.exe)。在代码中,您会弹出一个带有进程ID的消息框。启动studio的第二个实例,将其附加到该进程并调试。消息框会暂停它以允许进行设置。进程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
....

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

最新更新