【问题标题】:WTSSendmessage before stopping a service停止服务前的 WTSSendmessage
【发布时间】:2012-05-24 22:55:03
【问题描述】:

一旦用户尝试停止服务,我会尝试显示一个消息框。

为此,我使用了WTSSendmessage API...一旦SERVICE_CONTROL_STOP 事件发生,我就调用了该函数..

我在上述步骤中是否正确?因为一旦用户尝试停止服务,我就没有收到消息框..

请指导我...

下面是我的代码 sn-p::

case SERVICE_CONTROL_STOP:
    WTSSendMessage = (fptr1)GetProcAddress(hinstLib, "WTSSendMessage");
    BOOL ret = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, dwSession, lpszTitle, 12 ,lpszText, 7 ,MB_YESNO|MB_ICONINFORMATION, 0, &res, TRUE);

    ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
    SetServiceStatus( serviceStatusHandle, &serviceStatus );
    SetEvent( stopServiceEvent );
    return;

【问题讨论】:

  • 您确定“dwSession”变量设置正确吗?它的价值是什么?
  • dwsession 设置为“DWORD dwSession = WTSGetActiveConsoleSessionId();”
  • 嗨,coretech,问题出在“dwsession”上。我用“WTS_CURRENT_SESSION”替换了“dwsession”。 “WTS_CURRENT_SESSION”定义为“#define WTS_CURRENT_SESSION ((DWORD)-1)”。但相同的代码在 Windows 7 中不起作用.. 任何想法???

标签: c winapi service windows-services window


【解决方案1】:

按照MSDN article 中的描述使用 WTSGetActiveConsoleSessionId() 我在您之前的问题中向您展示过。该文章包含您需要的所有代码。

我还敦促您对 API 调用进行错误检查。在没有帮助的情况下诊断错误比需要的更难。

【讨论】:

  • 嗨大卫,我用过 BOOL ret = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE,WTSGetActiveConsoleSessionId(), (LPWSTR)L"WARNING", 8*2 ,(LPWSTR)L"我的警告信息", 74*2 , MB_ICONERROR|MB_TOPMOST|MB_SETFOREGROUND, 0, &res, FALSE);" ,通过使用它甚至不在 xp 中运行??知道吗?
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2017-01-25
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2016-05-05
相关资源
最近更新 更多