如何跟踪和调试Windows服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何跟踪和调试Windows服务相关的知识,希望对你有一定的参考价值。
1、调试windows 服务是system级别的所有在win7或win8下一定要以管理员身份启动,启动后添加新建项目windows服务确定就建立了一个windows服务程序
2、程序入口点自然在program中 main函数 跟控制台程序有点相似
static class Program
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
new Service1()
;
ServiceBase.Run(ServicesToRun);
public partial class Service1 : ServiceBase
public Service1()
InitializeComponent();
protected override void OnStart(string[] args)
protected override void OnStop()
参考技术A debug、winprep、perfmon、sysinternals
如何在Windows下暂停和恢复任何外部进程?
我正在寻找不同的方法来通过Windows XP下的进程ID以程序方式暂停和恢复某个特定进程。
进程暂停恢复工具 做到 SuspendThread
ResumeThread
但对多线程程序和死锁问题发出警告。
PsSuspend 看起来还不错,但我不知道它是否对死锁有什么特别的作用,或者使用其他方法?
首选语言 : C++ Python
如果你 "调试调试器"(例如,使用 logger.exe
来跟踪所有由 windbg.exe
),看来调试器使用的是 SuspendThread()
ResumeThread()
来暂停正在调试的进程中的所有线程。
PsSuspend可能会使用不同的方式来暂停进程(我不确定),但它仍然有可能挂起其他进程:如果你暂停的进程持有另一个进程所需要的共享同步对象,你可能会阻止另一个进程取得任何进展。如果两个程序都写得很好,当你恢复被暂停的那个程序时,它们应该会恢复,但不是所有的程序都写得很好。如果这导致你的程序暂停,那么你就有一个死锁。
我不知道这样做是否有效果,但是用MS Systernals的ProcessExplorer,你可以暂停一个进程。
这里已经说过了。https: /superuser.coma155263 我也是在那里找到的。
阅读 此处 你也有psutil的python,你可以使用它这样的。
>>> import psutil
>>> pid = 7012
>>> p = psutil.Process(pid)
>>> p.suspend()
>>> p.resume()
我测试过 http:/www.codeproject.comKBthreadspausep.aspx 在一些软件上。
运作良好。
PsSuspend和Pausep是两个有效的选项。
所以,当我发现 暂停按钮, Googling for this ("windows SIGSTOP"), get this question as the first search result (thanks Ilia K.) 您的评论 做了它的工作),看了答案,我又去查了一下代码。
显然它使用了未被记录的NT内核和Win32 APIs。_NtSuspendProcess
, _NtResumeProcess
和 _HungWindowFromGhostWindow
.
PsSuspend,你提到的并链接到的实用程序可能使用了这些API,我无法验证这一点,源代码没有提供,只有可执行文件和EULA,你大概可以通过拆解二进制文件来弄清楚,但这是违反EULA的。
所以,为了回答你的具体问题,请查看 暂停按钮的主。cpp, 基本上 你所谓 _NtSuspendProcess(ProcessHandle)
和 _NtResumeProcess(ProcessHandle)
, ProcessHandle
是要暂停或恢复的进程的句柄。
我认为Windows中没有SuspendProcess()函数是有原因的。有了这样一个函数,就会为一个不稳定的系统打开大门。你不得暂停一个进程,除非你自己创建了那个进程.如果你自己写了那个进程,你可以使用一个事件(参见MSDN中的::SetEvent()等)或其他种类的消息来触发进程中的暂停命令。
以上是关于如何跟踪和调试Windows服务的主要内容,如果未能解决你的问题,请参考以下文章
如何在C#中跟踪和停止正在运行的应用程序(Windows服务)