रियल समस्या: (विकिपीडिया से: http://en.wikipedia.org/wiki/User_Account_Control)
एक निष्पादन योग्य है कि "requireAdministrator" उसके मेनिफ़ेस्ट में के रूप में चिह्नित किया गया है CreateProcess का उपयोग कर एक गैर ऊपर उठाया प्रक्रिया से शुरू नहीं किया जा सकता है()। इसके बजाय, ERROR_ELEVATION_REQUIRED वापस कर दिया जाएगा। ShellExecute() या ShellExecuteEx() का उपयोग इसके बजाय किया जाना चाहिए।
(Btw, ERROR_ELEVATION_REQUIRED त्रुटि == 740)
समाधान: (एक ही साइट)
एक देशी Win32 आवेदन एक ही "runas" क्रिया एक ShellExecute में जोड़ा जा सकता में() या 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 - मूल यूएसी फ्लो
ठीक है, तो इससे पहले कि आप इसे में खुदाई, मैंने सोचा कि यह हो सकता है एक यूएसी जागरूक आवेदन के बुनियादी प्रवाह की व्याख्या करने के लिए सहायक हो और सबकुछ एक साथ कैसे फिट बैठता है। आम तौर पर, आपका एप्लिकेशन एक अप्रतिबंधित उपयोगकर्ता के रूप में चलता है। लेकिन, कभी-कभी इसे एक प्रशासक होना चाहिए (जो भी करना है)। तो, यहाँ मूल विचार है, छद्म कोड में:
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
['लॉगऑनसर '] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184 (v = vs.85) .aspx) अच्छी तरह से काम करना चाहिए, मुझे लगता है। यह विवरण में प्रक्रियाओं को सही बनाने का उल्लेख करता है। – chris
.... आपका प्रश्न क्या है? –
ऐसा नहीं है, यह उन लोगों के लिए एक समाधान है जो I – Samuel