Gerçek sorun: (Wikipedia'dan: http://en.wikipedia.org/wiki/User_Account_Control)
Manifest'inde "requireAdministrator" olarak işaretlenmiş bir yürütülebilir CreateProcess kullanarak olmayan bir yükseltilmiş sürecinden başlatılamaz(). Bunun yerine ERROR_ELEVATION_REQUIRED döndürüldü. Bunun yerine ShellExecute() veya ShellExecuteEx() kullanılmalıdır.
(btw, ERROR_ELEVATION_REQUIRED hata == 740)
Çözüm: (aynı site)
aynı "Runas" fiil bir ShellExecute eklenebilir doğal bir Win32 uygulamasında() veya ShellExecuteEx() çağrısı.
ShellExecute(hwnd, "runas", "C:\\Windows\\Notepad.exe", 0, 0, SW_SHOWNORMAL);
Bu da faydalı olabilir: (kaynak: http://mark.koli.ch/2009/12/uac-prompt-from-java-createprocess-error740-the-requested-operation-requires-elevation.html)
2 - Temel
Tamam UAC Akış, bunu içine kazmak önce bunu, Tahmin etmiştim UAC'nin farkında olduğu bir uygulamanın temel akışını ve her şeyin birbirine nasıl uyduğunu açıklamaya yardımcı olun. Normalde, uygulamanız ayrıcalıklı olmayan bir kullanıcı olarak çalışır. Ancak, bazen bir yönetici (ne olursa olsun) olması gerekir. Yani, burada temel fikir sahte kodda verilmiştir:
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);
}
Ve tıpkı tamlanışını aşkına - ShellExecute ve CreateProcess MSDN bağlantıları:
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;
}
Nihayet
, bunu bu şekilde yaptık nasıl :
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) iyi çalışmalı, düşünürdüm. Açıklamada doğrudan süreç oluşturulmasından bahseder. – chris
.... sorunuz nedir? –
Hayır, bu aynı sorunla karşılaşan insanlar için bir çözüm. – Samuel