외부 프로세스 실행을 위한 소스
아래 함수는 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' 카테고리의 다른 글
[개발/VC++] HINSTANCE & HWND의 차이 (0) | 2011.03.11 |
---|---|
[개발/VC++] 운영제체 XP 이상 확인 (0) | 2011.03.08 |
[개발] 인터넷 익스플로러 열어본 페이지 목록 확인할 수 있는 곳 (0) | 2011.02.22 |
[개발/VC++] Visual C++에 관련된 유용한 코드 팁 (0) | 2011.02.22 |
[개발/VC++] UTF8Decoding, UTF8Encoding (0) | 2011.02.21 |
댓글