• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 用ATL自动生成了一个NT服务程序,但是用-service安装服务后,在服务管理器中点启动,程序没有启动进行初始化工作?

用ATL自动生成了一个NT服务程序,但是用-service安装服务后,在服务管理器中点启动,程序没有启动进行初始化工作?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 用ATL自动生成了一个NT服务程序,但是用-service安装服务后,在服务管理器中点启动,程序没有启动进行初始化工作?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用ATL自动生成了一个NT服务程序,但是用-service安装服务后,在服务管理器中点启动,程序没有启动进行初始化工作?
描述:

怎么响应启动控制处理,在Handler中调试不到啊?怎么在Handler函数中处理服务程序启动时的初始化工作呢?
源代码如下,请高人指点;

inline void CServiceModule::Handler(DWORD dwOpcode)
{
    switch (dwOpcode)
    {
    case SERVICE_CONTROL_STOP:
        SetServiceStatus(SERVICE_STOP_PENDING);
        PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
        break;
    case SERVICE_CONTROL_PAUSE:
        break;
    case SERVICE_CONTROL_CONTINUE:
SetServiceStatus(SERVICE_RUNNING);
LogEvent("IAMSDtDumper Service Start...");
Run();
        break;
    case SERVICE_CONTROL_INTERROGATE:
        break;
    case SERVICE_CONTROL_SHUTDOWN:
        break;
    default:
        LogEvent(_T("Bad service request"));
    }
}
void CServiceModule::Run()
{
    _Module.dwThreadID = GetCurrentThreadId();
    HRESULT hr = CoInitialize(NULL);
//  If you are running on NT 4.0 or higher you can use the following call
//  instead to make the EXE free threaded.
//  This means that calls come in on a random RPC thread
//  HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    _ASSERTE(SUCCEEDED(hr));
    // This provides a NULL DACL which will allow access to everyone.
    CSecurityDescriptor sd;
    sd.InitializeFromThreadToken();
    hr = CoInitializeSecurity(sd, -1, NULL, NULL,
        RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
    _ASSERTE(SUCCEEDED(hr));
    hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE);
    _ASSERTE(SUCCEEDED(hr));
    LogEvent(_T("Service started"));
    if (m_bService)
        SetServiceStatus(SERVICE_RUNNING); //设置服务状态
if(!InitIAMSDtDumper())
{
AfxMessageBox("IAMSDtDumper初始化错误!");
}
    MSG msg;
    while (GetMessage(&msg, 0, 0, 0))
        DispatchMessage(&msg);
    _Module.RevokeClassObjects();
//  KillTimer(NULL, 1);
//  KillTimer(NULL, 2);
m_pDBAPIMgr->ReleaseDbConnection();
if( NULL != m_pConfigDataMgr )
{
delete m_pConfigDataMgr;
m_pConfigDataMgr = NULL;
}
if ( NULL != m_pDBAPIMgr)
{
delete m_pDBAPIMgr;
m_pDBAPIMgr = NULL;
}
    CoUninitialize();
}
/////////////////////////////////////////////////////////////////////////////
//
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, 
HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
    lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
    _Module.Init(ObjectMap, hInstance, IDS_SERVICENAME, &LIBID_IAMSDTDUMPERLib);
    _Module.m_bService = TRUE;
    TCHAR szTokens[] = _T("-/");
    LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens);
    while (lpszToken != NULL)
    {
        if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
            return _Module.UnregisterServer();
        // Register as Local Server
        if (lstrcmpi(lpszToken, _T("RegServer"))==0)
            return _Module.RegisterServer(TRUE, FALSE);
        
        // Register as Service
        if (lstrcmpi(lpszToken, _T("Service"))==0)
            return _Module.RegisterServer(TRUE, TRUE);
//2009-4-17 安装为服务
if (lstrcmpi(lpszToken, _T("Install"))==0)
return _Module.RegisterServer(TRUE, TRUE);
        
        lpszToken = FindOneOf(lpszToken, szTokens);
    }
    // Are we Service or Local Server
    CRegKey keyAppID;
    LONG lRes = keyAppID.Open(HKEY_CLASSES_ROOT, _T("AppID"), KEY_READ);
    if (lRes != ERROR_SUCCESS)
        return lRes;
    CRegKey key;
    lRes = key.Open(keyAppID, _T("{D3879983-5C19-4D8A-A2DC-7E3FAE0CE678}"), KEY_READ);
    if (lRes != ERROR_SUCCESS)
        return lRes;
    TCHAR szValue[_MAX_PATH];
    DWORD dwLen = _MAX_PATH;
    lRes = key.QueryValue(szValue, _T("LocalService"), &dwLen);
    _Module.m_bService = FALSE;
    if (lRes == ERROR_SUCCESS)
        _Module.m_bService = TRUE;
    _Module.Start();
    // When we get here, the service has been stopped
    return _Module.m_status.dwWin32ExitCode;
}


解决方案1:

怎么在Handl

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用ATL自动生成了一个NT服务程序,但是用-service安装服务后,在服务管理器中点启动,程序没有启动进行初始化工作?

相关文章

  • 2017-06-04 我想在IE中嵌入ACTIVE的控件,这个控件是一些图形象丙图,条形图,波形图怎么做
  • 2017-06-04 组件回调的问题
  • 2017-06-04 取得控件属性的问题
  • 2017-06-04 listbox中怎样加入可供选择的字体
  • 2017-06-04 请问拿到com接口怎么用比如IDataObject
  • 2017-06-04 关于调用COM接口内存泄漏的问题
  • 2017-06-04 atlactivex部署及添加方法
  • 2017-06-05 lib调用问题
  • 2017-06-04 多个文件上传的组件!
  • 2017-06-04 我想做个webservice但是没有界面电脑启动就运行,请给一点思路!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 急急!COM组件实例化时出错
    • ATL30用_Modulem_hInst求HINSTANCE,在ATL70中该怎么办?
    • 100分求助一个简单问题
    • [急]请问如何查询一个IDispatch对象的接口名称或CLS
    • 我有两个可执行程序,一个是mfc的一个是dos的,如何融合到一起?
    • directshow编译老出错,好好郁闷!
    • com编程什么时候需要用到LCID这种类型?
    • 哪位高手再帮忙给个MSMQ通信程序的源代码吧(VC库中的那个已经有了),谢谢啦!
    • -高手-高手-紧急-紧急俄罗斯对战多线程同步的问题
    • 我有一段内存,或者一个变量也可以,怎么能把它lock,包括操作系统都不能往里面写东西?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有