실제 문제 (위키 백과 : http://en.wikipedia.org/wiki/User_Account_Control가)
매니페스트에서 "requireAdministrator"로 표시되어 실행 파일은 CreateProcess를를 사용하여 비 상승 과정에서 시작할 수 없습니다(). 대신 ERROR_ELEVATION_REQUIRED가 반환됩니다. 대신 ShellExecute() 또는 ShellExecuteEx()를 사용해야합니다.
(BTW, ERROR_ELEVATION_REQUIRED 오류 == 740)
솔루션 (동일 위치)
동일한 "RUNAS가 '동사가 된 ShellExecute에 첨가 될 수있는 고유의 Win32 애플리케이션()에서 또는 ShellExecuteEx() 호출.
ShellExecute(hwnd, "runas", "C:\\Windows\\Notepad.exe", 0, 0, SW_SHOWNORMAL);
이것은 또한 도움이 될 수있다 : (출처 : http://mark.koli.ch/2009/12/uac-prompt-from-java-createprocess-error740-the-requested-operation-requires-elevation.html)
2 - 기본
좋아 UAC 흐름, 당신이 그것을 파고 전에, 그래서 나는 줄 알았는데 UAC를 인식하는 응용 프로그램의 기본 흐름과 모든 것이 어떻게 잘 맞는지 설명하는 데 도움이됩니다. 일반적으로 응용 프로그램은 권한이없는 사용자로 실행됩니다. 그러나 때로는 관리자가되어야합니다 (무엇이든 할 수 있습니다). 그래서, 여기에 기본적인 아이디어는 의사 코드에서의 :
if(0 == CreateProcess(argv[2], params, NULL, NULL, false, 0, NULL, NULL, &si, &pi)) {
//runas word is a hack to require UAC elevation
ShellExecute(NULL, "runas", argv[2], params, NULL, SW_SHOWNORMAL);
}
그리고 단지 completness을 위하여 -에서 ShellExecute 및 CreateProcess를에 MSDN 링크 :
int main (int argc, char **argv) {
HRESULT operation = tryToDoSomethingPrivileged();
if (operation == ACCESS_DENIED && !alreadyElevated) {
// Spawn a copy of ourselves, via ShellExecuteEx().
// The "runas" verb is important because that's what
// internally triggers Windows to open up a UAC prompt.
HANDLE child = ShellExecuteEx(argc, argv, "runas");
if (child) {
// User accepted UAC prompt (gave permission).
// The unprivileged parent should wait for
// the privileged child to finish.
WaitForSingleObject(child, INFINITE);
CloseHandle(pid);
}
else {
// User rejected UAC prompt.
return FAILURE;
}
return SUCCESS;
}
return SUCCESS;
}
마지막으로
, 이것은 내가 그것을 한 적이 어떻게 :
http://msdn.microsoft.com/en-us/library/bb762153%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx
['LogonUser'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184 (v = vs.85) .aspx)가 잘 작동해야한다고 생각합니다. 설명에서 바로 프로세스를 만드는 것에 대해 언급합니다. – chris
.... 귀하의 질문은 무엇입니까? –
그렇습니다. I와 같은 문제를 겪는 사람들을위한 솔루션입니다. – Samuel