在logout状态运行程序

做成服务,借鉴一篇codeproject得文章
http://www.codeproject.com/KB/system/xyntservice.aspx
在init函数添加定时器
很多病毒也用到这个技术。
  1. void CServiceLoaderDlg::OnBnClickedButtonInstall()
  2. {
  3.     // TODO: 在此添加控件通知处理程序代码
  4.     //GetDlgItemText(IDC_EDIT_SRVNAME, m_srvName);
  5.     SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
  6.     if (shMan == 0)
  7.     {
  8.         long nError = GetLastError();
  9.         AfxMessageBox("OpenSCManager failed! Error code = " + nError);
  10.         exit(-1);
  11.     }
  12.     else
  13.     {
  14.         SC_HANDLE shSrv = CreateService(shMan,
  15.                                         (LPCTSTR)m_srvName,
  16.                                         (LPCTSTR)m_srvName,
  17.                                         SERVICE_ALL_ACCESS,
  18.                                         SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS,
  19.                                         SERVICE_AUTO_START,
  20.                                         SERVICE_ERROR_NORMAL,
  21.                                         (LPCTSTR)m_path,
  22.                                         NULL,
  23.                                         NULL,
  24.                                         NULL,
  25.                                         NULL,
  26.                                         NULL);
  27.         if (shSrv == 0)
  28.         {
  29.             long nError = GetLastError();
  30.             AfxMessageBox("CreateService failed! Error code = " + nError);
  31.             exit(-1);
  32.         }
  33.         else
  34.         {
  35.             AfxMessageBox("CreateService SUCCESS!");
  36.             CloseServiceHandle(shSrv);
  37.         }
  38.         CloseServiceHandle(shMan);
  39.     }
  40. }
  41. void CServiceLoaderDlg::OnBnClickedButtonUninstall()
  42. {
  43.     // TODO: 在此添加控件通知处理程序代码
  44.     SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  45.     if (shMan == 0)
  46.     {
  47.         long nError = GetLastError();
  48.         AfxMessageBox("OpenSCManager failed! Error code = " + nError);
  49.         exit(-1);
  50.     }
  51.     else
  52.     {
  53.         SC_HANDLE shSrv = OpenService(shMan, m_srvName, SERVICE_ALL_ACCESS);
  54.         if (shSrv == 0)
  55.         {
  56.             long nError = GetLastError();
  57.             AfxMessageBox("OpenService failed! Error code = " + nError);
  58.             exit(-1);
  59.         }
  60.         else
  61.         {
  62.             if (!DeleteService(shSrv))
  63.             {
  64.                 long nError = GetLastError();
  65.                 AfxMessageBox("DeleteService failed! Error code = " + nError);
  66.                 exit(-1);
  67.             }
  68.             else
  69.             {
  70.                 //AfxMessageBox("Uninstall success");
  71.             }
  72.             CloseServiceHandle(shSrv);
  73.         }
  74.     }
  75.     CloseServiceHandle(shMan);
  76. }
  77. void CServiceLoaderDlg::OnBnClickedButtonStart()
  78. {
  79.     // TODO: 在此添加控件通知处理程序代码
  80.     SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  81.     if (shMan == 0)
  82.     {
  83.         long nError = GetLastError();
  84.         AfxMessageBox("OpenSCManager failed! Error code = " + nError);
  85.         exit(-1);
  86.     }
  87.     else
  88.     {
  89.         SC_HANDLE shSrv = OpenService(shMan, m_srvName, SERVICE_ALL_ACCESS);
  90.         if (shSrv == 0)
  91.         {
  92.             long nError = GetLastError();
  93.             AfxMessageBox("OpenService failed! Error code = " + nError);
  94.             exit(-1);
  95.         }
  96.         else
  97.         {
  98.             if (!StartService(shSrv, NULL, NULL))
  99.             {
  100.                 long nError = GetLastError();
  101.                 AfxMessageBox("StartService failed! Error code = " + nError);
  102.                 exit(-1);
  103.             }
  104.             else
  105.             {
  106.                 CloseServiceHandle(shSrv);
  107.             }
  108.         }
  109.         CloseServiceHandle(shMan);  
  110.     }
  111. }
  112. void CServiceLoaderDlg::OnBnClickedButtonStop()
  113. {
  114.     // TODO: 在此添加控件通知处理程序代码
  115.     SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  116.     if (shMan == 0)
  117.     {
  118.         long nError = GetLastError();
  119.         AfxMessageBox("OpenSCManager failed! Error code = " + nError);
  120.         exit(-1);
  121.     }
  122.     else
  123.     {
  124.         SC_HANDLE shSrv = OpenService(shMan, m_srvName, SERVICE_ALL_ACCESS);
  125.         if (shSrv == 0)
  126.         {
  127.             long nError = GetLastError();
  128.             AfxMessageBox("OpenService failed! Error code = " + nError);
  129.             exit(-1);
  130.         }
  131.         else
  132.         {
  133.             SERVICE_STATUS status;
  134.             if (!ControlService(shSrv, SERVICE_CONTROL_STOP, &status))
  135.             {
  136.                 long nError = GetLastError();
  137.                 AfxMessageBox("StartService failed! Error code = " + nError);
  138.                 exit(-1);
  139.             }
  140.             else
  141.             {
  142.                 CloseServiceHandle(shSrv);
  143.             }
  144.         }
  145.                 CloseServiceHandle(shMan);
  146.     }
  147. }
  148. void CServiceLoaderDlg::OnTimer(UINT nIDEvent)
  149. {
  150.     // TODO: 在此添加消息处理程序代码和/或调用默认值
  151.     CTime current;
  152.     if (nIDEvent == 1)
  153.     {
  154.         if (current.GetCurrentTime().GetHour() == 22 && current.GetCurrentTime().GetMinute() == 40)
  155.         {
  156.             /*AfxMessageBox("good");*/
  157.             this->OnBnClickedButtonStart();
  158.         }
  159.     }
  160.     CDialog::OnTimer(nIDEvent);
  161. }
  162. void CServiceLoaderDlg::OnDestroy()
  163. {
  164.     CDialog::OnDestroy();
  165.     // TODO: 在此处添加消息处理程序代码
  166.     this->OnBnClickedButtonStop();
  167. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值