Ошибка CreateProcess с кодом ошибки «740» в 64-битной Windows7

Я использую 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».

С Уважением,
Никсон

1

Решение

Попробуйте использовать ShellExecute() функция вместо CreateProcess()

Обновить:

  • CreateProcess() создает дочерний процесс с такими же разрешениями, это самый низкоуровневый API
  • ShellExecute/Ex() делегирует создание процесса в оболочку (которая может определить, требуются ли приложению привилегии). Если манифест позволяет запускать приложение без прав администратора, передайте lpOperation=L"runas" поднять его вручную
  • _wsystem() создает новый cmd.exe /c app.exe процесс (я думаю, через CreateProcess) тем самым делегируя создание процесса в командную строку
3

Другие решения

У вас ошибка описывает проблему: Запрошенная операция требует возвышения. Итак, вы должны начать с этого:

  • Вы уверены, что ваше родительское приложение имеет полный административные права?
  • Запрашивал ли он высоту при запуске?

Поскольку вы получаете предупреждение при его создании, у вас должен быть недействительный манифест. UAC манифест не имеет requestedPrivileges элемент, это скорее requestedExecutionLevel:

<requestedExecutionLevel
level="asInvoker|highestAvailable|requireAdministrator"uiAccess="true|false"/>
2

По вопросам рекламы [email protected]