6

ac# プログラムの「ほんの一部」について、OS から昇格された特権を要求する方法はありますか?

NUnit を使用して一連の統合テストを作成しています。私がテストしていることの 1 つは、テスト対象のアプリケーションがポート 843 に正しく接続されているかどうかです。テストでは、ポート 843 でリッスン ソケットを開き、テスト対象のアプリケーションにあらゆる種類の応答をスローして、アプリケーションが正しく動作するかどうかを検証します。 .

ただし、ポート 843 でリッスン ソケットを開くには、管理者権限が必要です。

このテストを実行できる最も邪魔にならない方法を見つけたいと思います。NUnit スイート全体を root/admin として実行することもできますが、それによって多くのものが root として実行されることになり、実際には root として実行する必要がないため、これを防ぎたいと考えています。

4

4 に答える 4

2

以下のコードが必要な場合は、現在ログインしているユーザーが管理者であるかどうかを確認するのに役立ちます。

using System;
using System.Security.Principal; 

class Test
{
    public static void Main()
    {
        if (new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
        {
            Console.WriteLine("I am an admin.");
        }
    }
}
于 2010-02-16T09:32:30.097 に答える
0

いいえ。昇格は、オール オア ナッシングです。通常、昇格が必要な場合、アプリは自分自身を昇格状態にブートストラップします。

于 2010-02-16T09:12:41.943 に答える
0

はい、 LogonUser関数を見てみましょう。ここにサンプルがあります。

于 2010-02-16T09:12:52.953 に答える
0

昇格された権限を持つには、昇格された権限でプロセスを開始する必要があります。昇格したステータスを「処理中」に変更することはできません。

これを回避する方法は、タスク マネージャーとして実行することです。その「昇格なし」を実行して「すべてのユーザーのプロセスを表示」をクリックすると、基本的に古いタスクマネージャープロセスが強制終了され、ジョブを実行するために昇格された特権で新しいプロセスが開始されます。

于 2010-02-16T09:50:45.940 に答える