외부 프로세스 실행을 위한 소스
아래 함수는 Windows 7 에서 관리자 권한으로 실행이 가능하게 하는 코드이다.
MFC 개발하시분 분들에게는 많이 유용할 것이다.
쌈꼬쪼려 소백촌닭
=======================================================
사례1
// 프로세스 실행
BOOL SBRICH::ExecuteProcess(CString FilePath, CString Parameter)
{
//TCHAR path[1024] = {0,};
//::GetModuleFileName(NULL, path, 1024);
BOOL bRes = FALSE;
if(OSVersionXPOver())
{
// 관리자 모드로 실행
SHELLEXECUTEINFO exeInfo = {0,};
exeInfo.cbSize = sizeof(SHELLEXECUTEINFO);
exeInfo.hwnd = NULL;
exeInfo.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI;
exeInfo.lpVerb = _T("runas");
exeInfo.lpFile = FilePath;
exeInfo.lpParameters = Parameter;
exeInfo.nShow = SW_SHOWNORMAL;
bRes = ::ShellExecuteEx(&exeInfo);
}
else
{
//xp 이하이므로 그냥 호출.
if( ::ShellExecute(NULL, _T("open"), FilePath, Parameter, NULL, SW_SHOW) == (HINSTANCE)HINSTANCE_ERROR)
bRes = FALSE;
else
bRes = TRUE;
}
return bRes;
}
===================================================================
사례2
// 프로세스 실행
BOOL SBRICH::ExecuteProcess(CString FilePath, CString Parameter)
{
//TCHAR path[1024] = {0,};
//::GetModuleFileName(NULL, path, 1024);
BOOL bRes = FALSE;
if(OSVersionXPOver())
{
// 관리자 모드로 실행
CString sRun;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpDesktop = "winsta0\\default";
ZeroMemory(&pi, sizeof(pi));
sRun = FilePath;
sRun += Parameter;
// start the child process
if (!CreateProcess(NULL, // no module name (use command line)
(LPSTR)(LPCSTR)sRun, // Command line
NULL, // Process handle not inheritate
NULL, // Thread handle not inheritate
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
#ifdef _DEBBUG
fprintf(Filelog, "CreateProcess Failed (%d)\n", GetLastError());
Filelog.flush();
#endif
return FALSE;
}
// wait until child process exits
WaitForSingleObject(pi.hProcess, INFINITE);
// Close process and thread handles;
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
//xp 이하이므로 그냥 호출.
if( ::ShellExecute(NULL, _T("open"), FilePath, Parameter, NULL, SW_SHOW) == (HINSTANCE)HINSTANCE_ERROR)
bRes = FALSE;
else
bRes = TRUE;
}
return bRes;
}
'IT-개발,DB' 카테고리의 다른 글
[개발/VS] 비주얼스튜디오2005 단축키 모음 (0) | 2013.03.26 |
---|---|
[개발/INI]INF 파일 구조 설명 (0) | 2013.03.26 |
[개발/모바일] 모바일 웹 브라우저를 체크하는 법 (0) | 2013.03.20 |
[개발/VC++] 실행중인 IE의 URL 구하기 (0) | 2013.03.20 |
[개발/페이스북] 페이스북 facebook Open api 사용하기 (0) | 2013.03.20 |
댓글