0

既存のアプリ (exe4j 経由で起動された Java) に自動更新機能を追加しています。管理者にとってはすべて正常に動作しますが、管理者以外のユーザーには、インストールされたディレクトリ ( c:\program files\myApp) への書き込みアクセス権がありません。

私が思いついた解決策はすべて少し悪いと感じたので、ここで質問したいと思いました. これまでに私が持っていたアイデアは次のとおりです。

  • プログラムのインストール ディレクトリ (例: c:\program files\myApp\bin) 内のサブディレクトリへの書き込みアクセスを全員に許可します。
  • プログラム ファイルに小さなブーストラップのみをインストールし、残りはユーザーの自宅 (おそらく AppData の下) にインストールします。これは、すべてのユーザーがほとんどのアプリケーションの複製コピーを持つことを意味します。
  • ユーザーのホーム ディレクトリにアプリ全体をインストールする

これを処理する最も正しい/最も悪い方法は何ですか?

4

2 に答える 2

0

あなたのアイデアにはセキュリティ上の問題があります。誰でも簡単にプログラム ファイルを変更できます。Google Chrome にも同じセキュリティ上の問題があります。マルウェアがファイルを変更するのははるかに簡単です。

のデフォルトの権限を変更することは絶対にお勧めしませんC:\Program Files\myApp\bin

重複を防ぎたい場合は、 を使用できますC:\ProgramData。これは、 ほど厳密ではありませんProgram Filesが、同じセキュリティ リスクがあります。

したがって、ユーザーのセキュリティを気にする場合は、アプリケーションを にインストールする必要がありますProgram Files。したがって、ファイルが意図せずに変更されるのを防ぐシステム保護が得られます。

アップデータ アプリケーションは、新しいファイルを に書き込む前に昇格しますProgram Files。欠点は、ユーザーがUAC プロンプトで[続行] ボタンをクリックする必要があることです。更新がかなりまれな場合は、これが最も簡単な方法です。Mozilla Firefox は以前、このアプローチを使用していました。ブラウザは更新をダウンロードし、次回の起動時に UAC 確認を表示し、更新されたファイルを に書き込みますProgram Files

最近、Firefox の更新エクスペリエンスが変更されました。更新を処理するサービスをインストールします。そうすれば、ユーザーは UAC の確認に煩わされることなく、すべてが透過的に行われます。彼らは Firefox を起動します。更新がある場合は、サービスが開始されます。サービスはシステム権限で実行されるため、プログラム ファイルへの書き込みアクセス権があり、ファイルが更新され、更新された Firefox が開始され、サービスがシャットダウンされます (次回まで)。アップデート)。

私は Firefox のアプローチがもっと好きです。Firefox のファイルは、ファイル システムのパーミッションによって意図しない変更から保護されています。同時に、静かに更新されるようになりました。彼らが更新サービスを実装する前は、3 か月に 1 回、UAC プロンプトで [続行]を押すことを気にしませんでした。

于 2012-09-12T06:31:09.350 に答える
0

アプリを%userprofile%\AppData\Localにインストールするのが最善の方法だと思います

アプリがそれほど大きくない場合は、これが最適なオプションです。たとえば、これは Google Chrome の仕組みです。

于 2012-09-11T16:46:29.230 に答える