1

Windows 7 64 ビット プラットフォームで VS2005 を使用しています。私のアプリケーションの 1 つは、API を使用して新しいプロセスを作成しようとしていCreateProcessます。GetLastError()プロセスの作成中にAPI がエラー 0 を返しまし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: 名前空間 "urn:schemas-microsoft-com:asm.v2" 内の認識されない要素 "requestedPrivileges"。

よろしく、ニクソン

4

2 に答える 2

3

ShellExecute()代わりに関数を使用してみてくださいCreateProcess()

アップデート:

  • CreateProcess()同じ権限を持つ子プロセスを作成します。これは最も低レベルの API です。
  • ShellExecute/Ex()プロセスの作成をシェルに委任します (アプリに特権が必要かどうかを検出できます)。マニフェストで非管理者としてのアプリの実行が許可されている場合は、パスlpOperation=L"runas"して手動で昇格させます
  • _wsystem()新しいcmd.exe /c app.exeプロセスを作成します(おそらく経由でCreateProcess)。したがって、プロセスの作成をコマンドプロンプトに委任します
于 2015-11-23T16:56:05.353 に答える
2

あなたが持っているエラーは問題を説明しています: The Requested Operation Requires Elevation . だからあなたはそれから始めなければなりません:

  • 親アプリケーションに完全な管理者権限がありますか?
  • 起動時に昇格を要求しましたか?

ビルド中に警告が表示されるため、無効なマニフェストが必要です。UAC マニフェストには要素がありません。requestedPrivilegesむしろrequestedExecutionLevel次のようになります。

<requestedExecutionLevel
    level="asInvoker|highestAvailable|requireAdministrator"
    uiAccess="true|false"
/>
于 2012-11-08T06:28:18.937 に答える