状況
複数のプラットフォームで (Eclipse RCP ベースの) Java アプリケーションを実行しています。Windowsを除くすべてのプラットフォームでこれを理解しました。
インストーラー: 私のアプリケーション インストーラーは常に昇格モードで実行されるため、アプリケーションを にインストールできますC:\Program files\MyProduct
。ユーザーの観点からは、インストーラーは管理者のみが実行でき、UAC は確認を求めます。これはうまくいきます。
通常の使用法: アプリケーションは通常のユーザーが起動できます。管理者権限は必要ありません。これはうまくいきます。
自動更新:自動更新機能も書き込みを行うため、管理者権限C:\Program Files\MyProduct
も必要です。そのため、アプリケーションは通常のアプリケーションとしても起動できますが、自動更新するには昇格したプロセスとして実行する必要があります。ユーザーの観点からは、自動更新するには「管理者として実行」する必要があります。
質問
Java プロセスが昇格モードであるかどうかを確認するための実行時チェックが必要です(つまり、「管理者として実行」されたかどうかを確認します)。
Windows のみのソリューションである可能性があることに注意してください。Java リフレクション API を使用して、実行時に Windows 固有または実装固有のクラスをチェックできます。
リサーチ
この質問は StackOverflow でのみ見つかりました: Java アプリケーションが Windows 管理者として実行されたかどうかを検出する
ただし、そのソリューションは、アクティブなユーザーが管理者グループのメンバーであるかどうかを返します。ユーザーは、昇格されていないモードでアプリケーションを起動している可能性があります。これを確認しました。
ノート
Eclipse RCP アプリケーションが、管理者権限を持っていない場合、ユーザー ディレクトリに更新を自動的にインストールすることは知っていますが、そのケースをブロックしたいと考えています。
ユーザー固有の構成を許可したいのですが (問題なく動作します)、ユーザー固有の更新を許可すると、アンインストール後に混乱が生じます。