As Tamash said, you need to start a new process with elevated rights. I searched a lot in the past, but I did not find a way to elevate the rights of the current process.
Suppose your main application is App1.exe, and then you call the secondary App2.exe process, which requires elevated privileges.
but. You can embed a manifest in your App2.exe, but an easier way is to create a manifest file [text file] named App2.exe.manifest with the following contents and put it in the same directory as App2.exe. The note:!! Oddly enough, if your application name is not App2.exe, but App2_install.exe or App2_setup.exe (that is, if the application name contains “install” or “setup”), then the UAC dialog box will automatically appear in Windows Vista / Windows 7 and will request elevated rights, even if the manifest file is missing! This is an example manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </assembly>
B. You can use the following code in App1.exe to run App2.exe
QString AppToExec = qApp->applicationDirPath() + "/App2.exe"; // Put any required parameters of App2.exe to AppParams string QString AppParams = ""; if (0 != genWin32ShellExecute(AppToExec, "", // default verb: "open" or "exec" AppParams, false, // run hidden true)) // wait to finish { // (...) handle error }
... and finally, this is the Win32 function code genWin32ShellExecute () that I created to start the process or open the document when using QT on Win32 O / S:
Title:
#ifdef Q_OS_WIN // Implement genWin32ShellExecute() especially for UAC #include "qt_windows.h" #include "qwindowdefs_win.h" #include <shellapi.h> int genWin32ShellExecute(QString AppFullPath, QString Verb, QString Params, bool ShowAppWindow, bool WaitToFinish); #endif
CPP:
// Execute/Open the specified Application/Document with the given command // line Parameters // (if WaitToFinish == true, wait for the spawn process to finish) // // Verb parameter values: // "" The degault verb for the associated AppFullPath // "edit" Launches an editor and opens the document for editing. // "find" Initiates a search starting from the specified directory. // "open" Launches an application. If this file is not an executable file, its associated application is launched. // "print" Prints the document file. // "properties" Displays the object properties. // // Ret: 0 = success // <0 = error