|
아래의 예는 윈도우 서비스에 등록된 서비스를 시작하고 상태를 체크하는 api및 예제입니다.
notepad.exe같은 window application을 실행하려면
ShellExecute ,ShellExecuteEx ... 등의 함수를 사용하시면 됩니다.
[샘플]
//notepad 띄우기
ShellExecute(0, "open", "notepad.exe", "", "", SW_SHOWNORMAL);
//작업관리자 띄우기...
ShellExecute(0, "open", "TaskMgr.exe", "", "", SW_SHOWNORMAL);
ShellExecute 나 WinExec 등으로 검색해 보세요....
jini 님이 쓰신 글 :
: 안녕하십니까?? 선배님들..
:
: 프로세스를 강제로 start 시키려는 데, 도저히 안되는군요.
: 여기 올려진 소스를 참고로 작성중인데.. OpenService한 후, 여기서 schService 변수가 null값입니다.
: 핸들을 가지지 못해서 생기는 문제인 거 같은데요.
: 혹시나 무엇이 문제인지 아는 선배님들.. 도와주세요..^ ^
:
: sSrvName은 "notepad.exe" 라는 실행파일 명을 가지고 있습니다.
:
:
: SC_HANDLE schService;
: SC_HANDLE schManager;
: SERVICE_STATUS ss;
:
: schManager = OpenSCManager(NULL,NULL,/*GENERIC_READ*/SC_MANAGER_ALL_ACCESS);
: schService = OpenService(schManager,sSrvName.c_str(), SERVICE_ALL_ACCESS/*SERVICE_START| SERVICE_QUERY_STATUS*/);//AMR_IP_SER.exe//AMR Remote IP Server
: //::SetCursor(LoadCursor(NULL,IDC_WAIT));
:
: if (StartService(schService, 0, NULL) == true)
: {
: QueryServiceStatus(schService, &ss);
: while(ss.dwCurrentState != SERVICE_RUNNING)
: {
: Sleep(ss.dwWaitHint);
: QueryServiceStatus(schService, &ss);
: }
: }
: else
: {
: schService = OpenService(schService, sSrvName.c_str(), SERVICE_CONTROL_INTERROGATE);
:
: ControlService(schService, SERVICE_CONTROL_INTERROGATE, &ss);
: if(ss.dwCurrentState==SERVICE_PAUSED)
: {
: schService = OpenService(schService,sSrvName.c_str(),GENERIC_EXECUTE);
: ControlService(schService,SERVICE_CONTROL_CONTINUE,&ss);
: }
: }
:
: //::SetCursor(LoadCursor(NULL,IDC_ARROW));
: CloseServiceHandle(schService);
|