5

セルフアップデーターを含む Java アプリケーションを作成しました。セルフ アップデーターは、新しいプログラム バージョンを Web サーバーからロードし、アプリケーション ファイルを置き換えます。アプリケーションがユーザーのホーム ディレクトリなどにインストールされている場合、これは完全に機能しますが、C:\Program Files フォルダーにインストールされている場合、Windows マシンでは失敗します。これは、JVM がプログラム ディレクトリへの書き込みアクセス権を持たないユーザーのアカウントで実行されるためです。インストーラーなどのネイティブ プログラムがプログラム フォルダーに書き込みを行おうとすると、通常はポップアップが表示され、ユーザーに書き込み操作を許可するように求められます。これは、Java アプリケーションでは発生しません。なんで?

ユーザーがそのフォルダへのアクセスを許可できるように、Java プログラムの制限付きフォルダへの書き込み操作でセキュリティ ポップアップが表示されるようにする方法はありますか?


ご回答ありがとうございます。回答によると、次のオプションが表示されます。

  1. Java Web Start
    私にとって、これはエンド ユーザーの選択肢ではありません。Java Web Start とは何か、それが何に役立ち、どのように使用されるかなど、一般のエンド ユーザーが知っているとは誰も期待できないと思います。たとえば、一般の Windows ユーザーが Java Web Start アプリケーションのアンインストール方法を知っているとは思えません。

  2. マニフェストで exe ランチャーを使用して Java アプリケーションを起動
    する このソリューションを理解する限り、exe ランチャーはアプリケーションの開始時に拡張実行を要求します。これはまさに私が望んでいるものではありません。私のユースケースでは、アプリケーションの起動ごとではなく、更新が利用可能であれば、拡張された権利を取得するだけで十分です。

  3. ネイティブ実行可能ファイルを呼び出して更新操作を実行する
    ネイティブ実行可能ファイルを呼び出して、更新操作を実行させることができます。このようにして、更新が利用可能な場合にのみ、アプリケーションは拡張された権利を要求します。これは悪くないように思えますが、Windows 用のネイティブ コーディングが含まれており、他のプラットフォームでは機能しません。

  4. ランチャーをプログラム フォルダーにインストールし、アプリケーションをユーザー ホームに
    インストール ユーザーのホーム ディレクトリにインストールされているアプリケーションを呼び出すプログラム フォルダーにランチャーを配置できます。このようにして、ユーザーのホーム フォルダー内のアプリケーションを更新することができます。私は Windows にアプリケーションをインストールするために InnoSetup を使用していますが、私が見る限り、このインストーラーやおそらく他のインストーラーでも分割インストールを実現するのは困難です。

  5. アプリケーション全体をユーザーのホーム ディレクトリにインストールする
    ユーザーは自分のホーム ディレクトリへの書き込みアクセス権を持っているため、まったく問題はありません。私にとって、これはその単純さの最良の選択肢のように見えます。

4

2 に答える 2

2

残念ながら、プログラムを最初に起動するときに、増加したアクセス許可を要求する必要があります。後でそれらに昇格することはできません。実行しているように見えるプログラムは、実際には舞台裏でより高い権限で再起動しています。

数年前にJavaアプリでこのような問題が発生し、最終的にアプリケーションをプログラムファイルではなくユーザーデータフォルダーにインストールしました。そうしないと、自動更新が悪夢でした. スタート メニューに追加することもできるので、ユーザーには他のプログラムとまったく同じように見えます。

于 2014-01-10T19:19:22.380 に答える