2017-04-13 9 views
0

自分自身にパッチを当てることができる.NETプログラムを開発しました。UACによる権限昇格

「管理者として実行」を選択した場合にのみ、パッチ適用プロセスが実行されることに気付きました。

この本よると、私は「アプリケーションマニフェストを作成し、embedd」する必要がありそうです。だから私の質問

https://msdn.microsoft.com/en-us/library/bb756929.aspx

を:

は、パッチを適用することができます鉱山(のようなアプリケーションのための、それは正常です自分自身)に管理者権限が必要ですアプリケーションが正常に昇格を必要としない場合は

おかげ

+0

なぜNSISでタグ付けされていますか? – Anders

答えて

0

AccessControl::GrantOnFile \"$INSTDIR" "(S-1-5-32-545)" "FullAccess" 

これはユーザーを与えたが、私のパッチは何の問題もなく、それに書くことができるという意味、プログラムファイル内のアプリケーションフォルダへのフルアクセスを占めています。

+0

これはすべてのセキュリティのベストプラクティスに反するため、管理者だけが共有実行可能ファイルを変更できる必要があります。 – Anders

+0

業界では巨人が使っている方法のようです(Epic Games、Steam、Battle.net)。 –

+0

私はスチームがサービスを使用したと思った?あなたは、Windowsロゴテストを実行しようとする可能性があります、私は問題として醜いACLを検出すると信じています。 – Anders

0

その後、私はそれがユーザーのために非常に迷惑になりますので、あなたがあなたのマニフェストにそれを要求することをお勧めしません。 FirefoxはNTサービスを使用してUACダイアログを表示しますが、あなたの更新が頻繁でない限り、どちらかお勧めできません。

パッチを適用する小さなアップデータアプリケーションを作成することをお勧めします。マニフェストで高度を要求することができます。この方法では、パッチを当てようとしているときだけユーザーが昇格する必要があります。あなたのバンドルに別の.exeを入れたくない場合は、パッチを当てる必要があるときにrunas verbで再度実行することができます。この行が含まれるようにNSISスクリプトを編集

+0

現在、Patcherはプログラムを実行するたびに最初に実行されるexeファイルです。 Patcherはバージョンファイルをダウンロードし、現在ダウンロードされているバージョンがファイル内のバージョンと同じかどうかを確認します。そうでない場合はパッチを適用し続け、そうであれば主要な実行可能ファイルだけをlucnhesします。だから、Patcherは毎回走っています。私はPatcherにマニフェストを入れますね。これはいつも承認される必要があるのでしょうか?または、UACはユーザーが承認したことを覚えています –

+0

つまり、毎回UACダイアログが表示されます。あなたのメインアプリで更新をチェックし、パッチを当てるものがあればパッチを起動してください。 – Anders

+0

NSISスクリプトを変更して、 "Users"がProgram Files内の自分のアプリケーションフォルダにアクセスできるようにしました。これで問題は解決しました。 –

関連する問題