我知道如何将调试器附加到Windows服务,但我似乎无法连接到由Windows安装程序安装和启动的调试器。我试过了:
设置Thread.Sleep(TimeSpan.FromSeconds(30));在开始时,但是当我尝试在Visual Studio中附加时,服务的名称不会显示为选项。这通常有效,服务名称显示在列表中,但使用安装程序时则不会。
设置Debugger.Break和Debugger.Launch。没有真正做任何事情。
我可以做些什么来调试我的服务?
更新
我添加了一个Thread.Sleep 30秒作为服务的第一行,当安装程序提示我失败时它应该做什么时,我在服务列表中启动服务(因为它没有已被删除),它没有立即失败,没有30秒的等待。它安装的文件是最新的(它们有正确的修改时间)。如果我在同一个项目中从我的测试应用程序运行相同的客户端,则会发生30秒的暂停,但出于某种原因,安装程序正在使用某些东西。
我真的不确定如何调试这个,令人沮丧的是这个服务过去常常正常工作。
答案:
检查应用程序日志向我显示了抛出的异常。事实证明我在安装程序中意外地破坏了一个文件,这解释了为什么我的调试技术都没有用。一旦我恢复了文件,我就可以正常连接视觉工作室(使用30秒暂停给我时间)。
答案 0 :(得分:2)
Debug.Assert(false, "attach now");
之类的内容。编辑1:我发生的事情,没有特别的顺序;
如果它曾经工作过,它是否可能不再以同一个用户身份运行?可能新用户没有相同的权限或权限已更改。
使用事件查看器检查应用程序日志。
如果在安装过程中出现问题,可能在InstallUtil.InstallLog或{assemblyname} .InstallLog中有一些信息,这些信息与.exe位于同一目录中。
我是从我的Linux笔记本电脑上做的,所以我有点模糊。
编辑2:
在服务管理器中,右键单击您的服务并选择属性。验证服务是否指向正确的可执行文件;我已经看到后期构建步骤做了一些时髦的事情。
答案 1 :(得分:1)
附加VS调试器时,请确保选中“显示所有用户的进程”。您的服务可能在本地服务或本地系统下运行。
答案 2 :(得分:1)