アプリのインストールのための .NET 2.0 プロセスの昇格
-
23-09-2019 - |
質問
C++ と .NET の両方で書かれたアプリケーションがあり、すべてのユーザーに対して Program Files フォルダーにインストールされます。このアプリケーションは、それ自体の新しいバージョンを (MSI インストーラーとして) ダウンロードし、それ自体を置き換えるために新しいインストーラー プロセスを生成します。
現在のインストール プロセスは次のとおりです。
- インストール マネージャー アプリ (C#、.NET 2.0) を一時ディレクトリにコピーします。この人を「マネージャー」と呼んでください
- マネージャーは昇格された特権で実行されます この記事ごとに.
- 元のアプリケーションが終了します。
- マネージャーは MSI インストーラーを起動します (コピーが昇格されているため、昇格された特権を使用して)
- マネージャーはアプリの新しいバージョンを生成します。
不具合:
新しくインストールされたアプリは昇格された状態で実行されています。これにより、ここでは列挙しない問題が発生します。
理想的には、新しくインストールされたアプリの起動は、元のユーザーの権限で実行されます。
昇格後にアプリを標準ユーザーに降格させる方法がわかりません。
洗練されていないハック:
(はい、はい、とにかくこのプロセス全体が洗練されていません)
- インストールマネージャーを一時ディレクトリにコピーします。
- 標準ユーザー特権を使用してインストール マネージャーを実行します。このインスタンスを「LowlyManager」と呼びます。
- 元のアプリケーションが終了します。
- LowlyManager がアプリを生成します また, 、今回は昇格された特権を使用します。このインスタンスに「UpperManagement」という名前を付けます。
- UpperManagement がインストーラーを起動します
- UpperManagement は正常に終了し、インストーラーの終了コードを返します。
- 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-方法/ の