0

C# コードから「manage-bde」シェル コマンドを実行する必要があります。

メイン アプリケーション プロセスはすでに管理者として実行されており、昇格されています。

私は次のコードを使用しました: アプリ プロセスが昇格されていることを確認するために、MS Web サイトの UAC 自己昇格の例。( http://code.msdn.microsoft.com/windowsdesktop/CSUACSelfElevation-644673d3 )

ただし、C# コードから manage-bde を実行しようとすると、「指定されたファイルが見つかりません」というメッセージが表示されます。

        Process p = new Process();
        p.StartInfo.FileName = "C:\\Windows\\System32\\manage-bde.exe";
        p.StartInfo.UseShellExecute = true;
        p.Start();

回避策として、コマンドを実行するバッチ ファイルを作成しようとしました。

        string batchFileName = DateTime.Now.Ticks + ".bat";
        StreamWriter writer = new StreamWriter(batchFileName);
        writer.WriteLine("manage-bde");
        writer.Flush();
        writer.Close();               
        Process p = new Process();
        p.StartInfo.FileName = batchFileName;               
        p.StartInfo.UseShellExecute = true;                             
        p.Start();

バッチ ファイルが書き込まれ、正常に実行されます。ただし、コマンド「manage-bde」は認識されません。

動詞「runas」を使用して管理者パスワードを使用するようにコードを変更しましたが、それは機能しますが、管理者パスワードを提供する必要なくバッチファイルを機能させたいです。現在ログインしているユーザーは既にコンピューターの管理者ですが、既存の管理者権限でバッチ ファイルが実行されていません。バッチ ファイルを実行して、manage-bde を正常に実行する必要があります。

あなたの助けやアドバイスは非常に高く評価されます:)

ps: manage-bde 以外の一部のコマンドは、admin runas を必要とせずに正常に動作します。

4

2 に答える 2

1

私が遭遇した動作の理由は、Windows ファイル システム リダイレクターでした。

ほとんどの場合、32 ビット アプリケーションが %windir%\System32 にアクセスしようとすると、アクセスは %windir%\SysWOW64 にリダイレクトされます。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187%28v=vs.85%29.aspx

私のアプリケーション ビルドは 32 ビットでした。System32 ウィンドウにアクセスしようとすると、「manage-bde.exe」を含まない SysWow64 に自動的にリダイレクトされます。ビルドを 64 ビットに変更すると、アプリケーションは System32 から manage-bde.exe にアクセスできるようになりました

于 2015-03-15T06:14:04.587 に答える
0

管理者ユーザーとして実行している場合でも、UAC が実行されている場合、完全には昇格されません。つまり、UAC プロンプトが表示されるか、パスワードの入力を求められます。

これを回避できる唯一の実際の方法は、最初にアプリケーションを昇格して実行するか、昇格されたアクセス許可で実行されるサービスを作成して新しいプロセスを開始することです。

もちろん、別の方法として UAC を無効にすることもできますが、これはほとんどの状況で望ましくありません。

于 2013-05-20T12:56:24.067 に答える