这里写目录标题
Windows 服务调试方法
MessageBox 法
思路与普通 Windows 程序调试一样, 利用弹出消息框时产生的中断, 我们将 VS IDE 附加调试到进程中的服务程序.
Windows 服务程序中弹出消息框与 Windows 普通程序不一样, 需要采用如下代码:
#include <windows.h>
#include <WtsApi32.h>
#pragma comment( lib, "WtsApi32.lib" )
DWORD sessionId = WTSGetActiveConsoleSessionId();
DWORD dwRespon = 0xFF;
if (!WTSSendMessage((HANDLE)0, sessionId, _T("server"), 6, _T("this is a msg form server"), 26, MB_OKCANCEL, 0, &dwRespon, true))
{
// 写文件("WTSSendMessage failed");
}
else
{
// 写文件("WTSSendMessage success");
}
比较通用的写法:
BOOL SvcMessageBox( LPSTR lpCap, LPSTR lpMsg, DWORD style, DWORD &result )
{
if ( NULL == lpMsg || NULL == lpCap )
return FALSE;
result = 0;
DWORD sessionXId = WTSGetActiveConsoleSessionId();
return WTSSendMessage( WTS_CURRENT_SERVER_HANDLE, sessionXId,
lpCap, strlen(lpCap),
lpMsg, strlen(lpMsg),
style, 0, &result, FALSE );
}