質問

C++ と .NET の両方で書かれたアプリケーションがあり、すべてのユーザーに対して Program Files フォルダーにインストールされます。このアプリケーションは、それ自体の新しいバージョンを (MSI インストーラーとして) ダウンロードし、それ自体を置き換えるために新しいインストーラー プロセスを生成します。

現在のインストール プロセスは次のとおりです。

  1. インストール マネージャー アプリ (C#、.NET 2.0) を一時ディレクトリにコピーします。この人を「マネージャー」と呼んでください
  2. マネージャーは昇格された特権で実行されます この記事ごとに.
  3. 元のアプリケーションが終了します。
  4. マネージャーは MSI インストーラーを起動します (コピーが昇格されているため、昇格された特権を使用して)
  5. マネージャーはアプリの新しいバージョンを生成します。

不具合:

新しくインストールされたアプリは昇格された状態で実行されています。これにより、ここでは列挙しない問題が発生します。

理想的には、新しくインストールされたアプリの起動は、元のユーザーの権限で実行されます。

昇格後にアプリを標準ユーザーに降格させる方法がわかりません。

洗練されていないハック:

(はい、はい、とにかくこのプロセス全体が洗練されていません)

  1. インストールマネージャーを一時ディレクトリにコピーします。
  2. 標準ユーザー特権を使用してインストール マネージャーを実行します。このインスタンスを「LowlyManager」と呼びます。
  3. 元のアプリケーションが終了します。
  4. LowlyManager がアプリを生成します また, 、今回は昇格された特権を使用します。このインスタンスに「UpperManagement」という名前を付けます。
  5. UpperManagement がインストーラーを起動します
  6. UpperManagement は正常に終了し、インストーラーの終了コードを返します。
  7. LowlyManager は、UpperManagement からのエラー コードを解釈し、新しくインストールされたアプリケーションを生成します。今回は元の呼び出し者として。

これを行うより良い方法はありますか?

(ユーザーにとってプロセスをよりスムーズにするために、これらの手順の前後にその他の多くの詳細を省略しましたが、解決しようとしている問題の核心を理解するにはこれで十分です。)

その他の要件:

  • ユーザーごとのアプリとしてインストールすることはできません
  • UAC が単に「これを許可してもよろしいですか?」と尋ねるだけであれば、ユーザーに認証ダイアログ ボックスが表示されるべきではありません。これにより、WindowsImpersonationContext を使用するソリューションが強制終了される可能性があると思いますが、よくわかりません。
  • システムは XP、Vista、および Windows 7 で動作する必要があります (XP 用に別のプロセスがある場合でも)。
役に立ちましたか?

解決

一つの方法: http://www.codeproject.com/KB/ Vistaのセキュリティ/ VistaElevator.aspxする

(前回の記事の中で最も最近のコメントで述べた)もう一つの方法:<のhref = "http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for - あなたの部分-2-方法/」REL = 『nofollowをnoreferrer』> http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part -2-方法/ の

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top