3

背景:私は決してWindowsセキュリティ/ユーザー権限の専門家ではありません。ルートディレクトリのファイルとフォルダの書き込み/削除、ディスク上の他の場所でのファイルの書き込み/削除、システムレジストリ(ローカルマシン)の値の書き込み/変更、および起動と起動が可能なアプリケーション(C#で記述)があります。他のアプリケーションサービスを停止します。これらのアクションの少なくとも一部には、管理者権限が必要だと思います。

これを実行してみましたが、UACがオフになっているコンピューターでは、追加の設定なしでうまく機能します。ただし、UACがオンになっているコンピューター(Windows 7では「通知しない」より上のレベル)では、クラッシュします。すべてのコンピューターで動作するために必要です。

今までは、「このプログラムを管理者として実行する」チェックボックスを手動でチェックするだけで、すべて問題ありませんでした。ただし、現在、お客様がこのソフトウェアを自分でインストールできるようにすることを決定しており、「箱から出して」実行する必要があります。

Visual Studio 2008に、すべてをインストールし、必要な起動データをレジストリに書き込む展開プロジェクトがあります。ここで行う必要があるのは、「このプログラムを管理者として実行する」フラグを設定することです。これは私が望むほど単純ではないと思います。

では、これを行う適切な方法は何ですか?このプログラムは起動時に開始されます。お客様がコンピューターを再起動するたびにUACがポップアップする(場合によっては画面が暗くなる)と、お客様を苛立たせます。

ご協力ありがとうございました。

編集:あなたの返事をありがとう。UACの回避は眉をひそめるだろうと思います。また、Microsoftは「ホワイトリスト」をサポートしていないため、許可を求めるのは1回だけであることがわかります。それは問題ありませんが、それを尊重することはできますが、フォローアップの質問がいくつかあります。

  • プログラムを適切に昇格させて昇格状態を修正する方法を示すリンクを教えていただけますか?オプションなどについての文献はありますか...基本的にはUAC101ガイドが欲しいです。

  • 追加の特権が必要な場合にセキュリティステータスを上げる方法はありますか(そしてUACでプロンプトを表示する場合のみ)。基本的に、このアプリケーションはバックグラウンドで実行され、ほとんどの場合何もしません。時々、いくつかのファイルをチェックします(この時点で、ディスクに書き込んでレジストリを読み取ることができる必要があります(この時点では読み取り専用で問題ありません)が、一時的なフォルダーであるため、どこにいても問題ありません。 'd put it。アプリケーションが特権なしで書き込みできる場所があれば、それは完璧です。)

    ただし、ある時点で残りのすべてのタスクを実行する必要があるため(ユーザーはとにかくこのアクションを確認する必要があります)、UACがこの時点でプロンプトを表示する場合は、問題ありません。この時点でそれを昇格させてから、デフォルトの権限に戻す方法はありますか?

  • このようなソリューションは、VistaやXpなどの古いバージョンのWindows(およびおそらく古いバージョン)で機能しますか?それを機能させるには何が必要ですか?

4

3 に答える 3

3

適切な方法は、プログラムの開始時にUACプロンプト(プログラムのマニフェストを介して設定できます)を使用して昇格することです。巧妙に回避しようとすると、眉をひそめます。

考えてみてください。UACプロンプトなしで自動的に昇格するものをインストールできるとしたら...UACのポイントは何でしょうか。

UACマニフェストをプログラムに追加するには、プロジェクトにマニフェストを追加して編集するだけです。UACのサンプルマニフェストはこちらです。可能な限り最後に昇格したい場合は、スポーン別のプロセスが必要です。既存のプロセスを昇格させることはできません。そのビットを分離してから、を使用して開始します

Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";
于 2010-02-10T14:30:06.570 に答える
0

プログラムを2つのコンポーネントに分割できます。

  • 昇格なしで実行されているユーザーアプリケーション
  • 昇格が必要なタスクを担当するWindowsサービス

.NETを使用しているため、コンポーネント間の通信はおそらくWCFを使用して行うのが最も簡単です。

補足として:C:\ Program Filesの下でファイルをプログラムで変更することは良い習慣とは見なされず、他の多くの問題を引き起こす可能性があります。Windowsには、構成設定やその他のプログラムデータを保存するための専用の場所があります。

于 2010-02-10T14:46:46.823 に答える
0

アプリケーションの仕組みを再考する必要があります。ログイン時に昇格プロンプトを表示するのが煩わしいことは間違いありません。だからやらないでください。一方、管理アクセスを使用して実行する必要があるタスクがある場合もあります。

したがって、次の 2 つの選択肢があります。

  • タスクを変更して、管理者の昇格が不要になるようにします (たとえば、ファイルを別の場所に書き込むなど)。
  • アプリケーションを Windows サービス コンポーネントとユーザー インターフェイス コンポーネントに分割します。サービス コンポーネントは、昇格されたアカウントで実行できます (できれば、必要なタスクを実行するために必要な昇格が最も低いアカウント)。ユーザー インターフェイス コンポーネントは、必要に応じて (名前付きパイプなどを介して) サービスと通信できます。
于 2010-02-10T14:44:54.940 に答える