Я использую VS2005 в Windows 7 64-битной платформе. Одно из моих приложений пытается создать новый процесс, используя CreateProcess
API. При создании процесса API возвращает ошибку 0. Я проверил код ошибки, используя GetLastError()
, Я получил 740
: Запрошенная операция требует возвышения. Приложение, которое пытается создать новый процесс, имеет права администратора.
Я использую следующий код для создания процесса:
// Create the process using modified stratup info
int nRetVal = CreateProcess( (LPSTR)strFullPath.c_str(),
(LPSTR)strCmdLine.c_str(),
0, 0, FALSE, 0 , 0,
(LPSTR)strWorkingDir.c_str(),
//NULL,
&StartupInfo, &ProcInfo );
Как я могу запустить новый процесс из моего приложения, не отключая UAC?
При создании родительского приложения я получаю следующее предупреждение:
App.manifest: предупреждение об авторизации манифеста 81010002: нераспознанный элемент «requiredPrivileges» в пространстве имен «urn: schemas-microsoft-com: asm.v2».
С Уважением,
Никсон
Попробуйте использовать ShellExecute()
функция вместо CreateProcess()
Обновить:
CreateProcess()
создает дочерний процесс с такими же разрешениями, это самый низкоуровневый APIShellExecute/Ex()
делегирует создание процесса в оболочку (которая может определить, требуются ли приложению привилегии). Если манифест позволяет запускать приложение без прав администратора, передайте lpOperation=L"runas"
поднять его вручную_wsystem()
создает новый cmd.exe /c app.exe
процесс (я думаю, через CreateProcess
) тем самым делегируя создание процесса в командную строкуУ вас ошибка описывает проблему: Запрошенная операция требует возвышения. Итак, вы должны начать с этого:
Поскольку вы получаете предупреждение при его создании, у вас должен быть недействительный манифест. UAC манифест не имеет requestedPrivileges
элемент, это скорее requestedExecutionLevel
:
<requestedExecutionLevel
level="asInvoker|highestAvailable|requireAdministrator"uiAccess="true|false"/>