做成服务,借鉴一篇codeproject得文章
http://www.codeproject.com/KB/system/xyntservice.aspx
在init函数添加定时器
很多病毒也用到这个技术。
http://www.codeproject.com/KB/system/xyntservice.aspx
在init函数添加定时器
很多病毒也用到这个技术。
- void CServiceLoaderDlg::OnBnClickedButtonInstall()
- {
- // TODO: 在此添加控件通知处理程序代码
- //GetDlgItemText(IDC_EDIT_SRVNAME, m_srvName);
- SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
- if (shMan == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenSCManager failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- SC_HANDLE shSrv = CreateService(shMan,
- (LPCTSTR)m_srvName,
- (LPCTSTR)m_srvName,
- SERVICE_ALL_ACCESS,
- SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS,
- SERVICE_AUTO_START,
- SERVICE_ERROR_NORMAL,
- (LPCTSTR)m_path,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
- if (shSrv == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("CreateService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- AfxMessageBox("CreateService SUCCESS!");
- CloseServiceHandle(shSrv);
- }
- CloseServiceHandle(shMan);
- }
- }
- void CServiceLoaderDlg::OnBnClickedButtonUninstall()
- {
- // TODO: 在此添加控件通知处理程序代码
- SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- if (shMan == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenSCManager failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- SC_HANDLE shSrv = OpenService(shMan, m_srvName, SERVICE_ALL_ACCESS);
- if (shSrv == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- if (!DeleteService(shSrv))
- {
- long nError = GetLastError();
- AfxMessageBox("DeleteService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- //AfxMessageBox("Uninstall success");
- }
- CloseServiceHandle(shSrv);
- }
- }
- CloseServiceHandle(shMan);
- }
- void CServiceLoaderDlg::OnBnClickedButtonStart()
- {
- // TODO: 在此添加控件通知处理程序代码
- SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- if (shMan == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenSCManager failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- SC_HANDLE shSrv = OpenService(shMan, m_srvName, SERVICE_ALL_ACCESS);
- if (shSrv == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- if (!StartService(shSrv, NULL, NULL))
- {
- long nError = GetLastError();
- AfxMessageBox("StartService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- CloseServiceHandle(shSrv);
- }
- }
- CloseServiceHandle(shMan);
- }
- }
- void CServiceLoaderDlg::OnBnClickedButtonStop()
- {
- // TODO: 在此添加控件通知处理程序代码
- SC_HANDLE shMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- if (shMan == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenSCManager failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- SC_HANDLE shSrv = OpenService(shMan, m_srvName, SERVICE_ALL_ACCESS);
- if (shSrv == 0)
- {
- long nError = GetLastError();
- AfxMessageBox("OpenService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- SERVICE_STATUS status;
- if (!ControlService(shSrv, SERVICE_CONTROL_STOP, &status))
- {
- long nError = GetLastError();
- AfxMessageBox("StartService failed! Error code = " + nError);
- exit(-1);
- }
- else
- {
- CloseServiceHandle(shSrv);
- }
- }
- CloseServiceHandle(shMan);
- }
- }
- void CServiceLoaderDlg::OnTimer(UINT nIDEvent)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- CTime current;
- if (nIDEvent == 1)
- {
- if (current.GetCurrentTime().GetHour() == 22 && current.GetCurrentTime().GetMinute() == 40)
- {
- /*AfxMessageBox("good");*/
- this->OnBnClickedButtonStart();
- }
- }
- CDialog::OnTimer(nIDEvent);
- }
- void CServiceLoaderDlg::OnDestroy()
- {
- CDialog::OnDestroy();
- // TODO: 在此处添加消息处理程序代码
- this->OnBnClickedButtonStop();
- }