6

UACポップアップを防ぐために、C#cmd.exeからの引数を使用して管理者として実行したいと考えています。これは、自動インストール プロセスとして使用するために必要です。渡すコマンドは、サイレント インストール用のインストール ファイル (.exe) へのパスです。/q

このコードを実行すると、CMD ポップアップが表示されますが、何も実行されていないかのように実行されます。

public static string ExecuteCommandAsAdmin(string command)
{

    ProcessStartInfo procStartInfo = new ProcessStartInfo()
    {
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true,
        FileName = "runas.exe",
        Arguments = "/user:Administrator cmd /K " + command
    };

    using (Process proc = new Process())
    {
        proc.StartInfo = procStartInfo;
        proc.Start();

        string output = proc.StandardOutput.ReadToEnd();

        if (string.IsNullOrEmpty(output))
            output = proc.StandardError.ReadToEnd();

        return output;
    }
}
4

5 に答える 5

8

問題の解決策を見つけることができなかった人は、私のためにこの解決策を見つけました: 解決策ファイルで、選択してください

追加 => 新しい項目 => アプリケーション マニフェスト ファイル

次に、C# で開きます。

ここに画像の説明を入力

アプリケーション マニフェスト ファイルで、「asInvoker」の名前を「requireAdministrator」に変更します。最後に、アプリケーション マニフェスト ファイルは次のようになります。

ここに画像の説明を入力

次に、ソリューションを構築します。その後、すべてのアプリを管理者権限で開くことができます。

于 2015-04-18T21:28:15.290 に答える
6

コマンドに少なくとも 1 つの問題があります。次の行です。

Arguments = "/user:Administrator cmd /K " + command

次のようにする必要があります。

Arguments = "/user:Administrator \"cmd /K " + command + "\""

また、これは完全に自動化されたプロセスとしては機能しません。これは、Windows Vista 以降では不明な管理者のパスワードを要求するためです。

于 2013-05-13T19:38:29.127 に答える
1

「ユーザーアカウント制御設定」のユーザー設定に応じて、UAC がポップアップ表示されます。プログラムはそれをバイパスできません。ユーザーが「通知しない」の設定をしている場合にのみ、プログラムはあなたがしようとしていることを実行します。

于 2013-05-13T19:38:10.790 に答える
1

2 つの解決策: まず、ユーザーの appdata ディレクトリを削除します。これにより、そもそも管理者権限が必要なくなります。(より一般的なアプローチでは、それらの特権が本当に必要かどうかを慎重に検討してください)

これらの特権を持つ Windows サービスを作成する別のソリューション。そのサービスの最初のインストールには管理者権限が必要ですが、その後は作業をそのサービスに委任できます。

2 番目の解決策は潜在的なセキュリティ違反です。そのため、そのサービスが何を実行できるかを慎重に検討する必要があります。

于 2014-03-05T16:29:53.757 に答える