如何使用VC将一个已安装的服务启动起来? 我在写了一个服务程序,安装后它处于自动启动状态,如何用程序将服务启动而不用手工去启动此服务程序?请高手指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 OpenSCManager(...)OpenService(...)StartService(...)ControlService(...) BOOL CNleApp::ResetService(){ SC_HANDLE s_Manager; SC_HANDLE s_Handle; SERVICE_STATUS status; BOOL bOK = FALSE; s_Manager = ::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (s_Manager == NULL) return 0; s_Handle = ::OpenService(s_Manager,_T("ServiceName"),SERVICE_ALL_ACCESS); if (s_Handle == NULL) { ::CloseServiceHandle(s_Manager); return 0; } if (ControlService(s_Handle,SERVICE_CONTROL_STOP, &status)) { Sleep(status.dwWaitHint); const TCHAR* str = _T("DigiCtrl"); if (::StartService(s_Handle,1,&str)) { ::QueryServiceStatus(s_Handle, &status); Sleep(status.dwWaitHint); bOK = TRUE; } } ::CloseServiceHandle(s_Handle); ::CloseServiceHandle(s_Manager); if (!bOK) return 0; return TRUE;} SC_HANDLE schService; SC_HANDLE schSCManager; SERVICE_STATUS ssStatus; CString ErrMsg; TCHAR szPath[512]="c:\\service\\ReplServer.exe"; schSCManager = OpenSCManager( NULL, // machine (NULL == local) NULL, // database (NULL == default) SC_MANAGER_ALL_ACCESS // access required ); if ( schSCManager ) { schService = OpenService( schSCManager, // SCM database TEXT(SZSERVICENAME), // service name SERVICE_ALL_ACCESS); Sleep(3000); if (schService == NULL) { ErrMsg=""; ErrMsg=ErrMsg+"OpenService failed -"+GetLastErrorText(szErr, 256); ::AfxMessageBox(ErrMsg); } if (!QueryServiceStatus( schService, // handle to service &ssStatus) ) // address of status information ::AfxMessageBox(GetLastErrorText(szErr, 256)); if (ssStatus.dwCurrentState != SERVICE_RUNNING) { m_TrayIcon.SetIcon(IDI_STOP); if(!StartService(schService,0,NULL)) ::AfxMessageBox(GetLastErrorText(szErr, 256)); else m_TrayIcon.SetIcon(IDI_START); } else m_TrayIcon.SetIcon(IDI_START); CloseServiceHandle(schService); CloseServiceHandle(schSCManager); } 用OpenCV还是Matlab比较好? 求【8位灰度图像】转换为【8位256色图像】或【24位真彩图像】算法【黑白型】!!! 国内 一个优秀的code - 求<<opengl编程与实例>>的光盘源码 画图时如何设置数字的字体和大小? 关于求字节的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!! GMT格式的字符串如何转为CTime呢? 请VC高手指教!!!! 如何使用listbox控件 MFC 树控件(CTreeCtrl) 如何设置某项节点不可用 如何让控件布满视图,up者有分 100分!!(加分)
OpenService(...)
StartService(...)
ControlService(...)
{
SC_HANDLE s_Manager;
SC_HANDLE s_Handle;
SERVICE_STATUS status;
BOOL bOK = FALSE; s_Manager = ::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (s_Manager == NULL)
return 0;
s_Handle = ::OpenService(s_Manager,_T("ServiceName"),SERVICE_ALL_ACCESS);
if (s_Handle == NULL)
{
::CloseServiceHandle(s_Manager);
return 0;
}
if (ControlService(s_Handle,SERVICE_CONTROL_STOP, &status))
{
Sleep(status.dwWaitHint);
const TCHAR* str = _T("DigiCtrl");
if (::StartService(s_Handle,1,&str))
{
::QueryServiceStatus(s_Handle, &status);
Sleep(status.dwWaitHint);
bOK = TRUE;
}
}
::CloseServiceHandle(s_Handle);
::CloseServiceHandle(s_Manager);
if (!bOK)
return 0;
return TRUE;
}
SC_HANDLE schSCManager;
SERVICE_STATUS ssStatus;
CString ErrMsg;
TCHAR szPath[512]="c:\\service\\ReplServer.exe";
schSCManager = OpenSCManager(
NULL, // machine (NULL == local)
NULL, // database (NULL == default)
SC_MANAGER_ALL_ACCESS // access required
);
if ( schSCManager )
{
schService = OpenService(
schSCManager, // SCM database
TEXT(SZSERVICENAME), // service name
SERVICE_ALL_ACCESS);
Sleep(3000);
if (schService == NULL)
{
ErrMsg="";
ErrMsg=ErrMsg+"OpenService failed -"+GetLastErrorText(szErr, 256);
::AfxMessageBox(ErrMsg);
}
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
::AfxMessageBox(GetLastErrorText(szErr, 256));
if (ssStatus.dwCurrentState != SERVICE_RUNNING)
{
m_TrayIcon.SetIcon(IDI_STOP);
if(!StartService(schService,0,NULL))
::AfxMessageBox(GetLastErrorText(szErr, 256));
else
m_TrayIcon.SetIcon(IDI_START);
}
else
m_TrayIcon.SetIcon(IDI_START);
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
}