gpt4 book ai didi

visual-studio - 如何调试正在安装的 Windows 服务?

转载 作者:行者123 更新时间:2023-12-04 06:36:14 26 4
gpt4 key购买 nike

我知道如何将调试器附加到 Windows 服务,但我似乎无法附加到正在由 Windows 安装程序安装和启动的服务。我试过:

  1. 设置一个 Thread.Sleep(TimeSpan.FromSeconds(30));在启动开始时,但当我尝试在 Visual Studio 中附加时,服务名称未作为选项出现。这通常有效,服务的名称显示在列表中,但在使用安装程序时却没有。

  2. 设置 Debugger.Break 和 Debugger.Launch。两者都没有真正做任何事情。

如何调试我的服务?

更新:

我在服务的第一行添加了一个 Thread.Sleep 30 秒,当安装程序提示我失败时应该做什么时,我在服务列表中启动该服务(因为它还没有被删除),它立即失败,没有 30 秒的等待。它安装的文件是最新的(它们有正确的修改时间)。如果我在同一个项目中从我的测试应用程序运行同一个客户端,则会发生 30 秒暂停,但由于某种原因安装程序出了问题。

我真的不确定如何调试这个,令人沮丧的是这个服务曾经正常工作。

答案:

检查应用程序日志显示了抛出的异常。原来我不小心破坏了安装程序中的一个文件,这解释了为什么我的调试技术都不起作用。恢复文件后,我就可以像往常一样附加 visual studio(使用 30 秒暂停给我时间)。

最佳答案

  1. 在 services.msc 中,右键单击您的服务并选择属性。
  2. 在“登录”选项卡中启用“允许服务与桌面交互”。
  3. 向您的 ServiceBase 的 OnStart 方法添加类似 Debug.Assert(false, "attach now"); 的内容。
  4. 附加到进程并在断言对话框中单击“忽略”。

编辑 1: 发生在我身上的事情,没有特定的顺序;

如果它曾经有效,是否可能不再以同一用户身份运行?新用户可能没有相同的权限或权限已更改。

使用事件查看器检查应用程序日志。

如果在安装过程中出现问题,InstallUtil.InstallLog 或 {assemblyname}.InstallLog 中可能有一些信息,这些信息将与 .exe 位于同一目录中。

我是在我的 Linux 笔记本电脑上做的,所以我有点模糊。

编辑 2:

在服务管理器中,右键单击您的服务并选择属性。验证服务指向正确的可执行文件;我见过后期构建步骤做一些时髦的事情。

关于visual-studio - 如何调试正在安装的 Windows 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com