2012-01-11 16 views
6

私は書いたJavaデスクトップアプリケーションを持っています。 実行中に、システムに定義されているデフォルトのパス名でフォルダとファイルを作成します。ユーザ作業ディレクトリ:XP対Vista

Java.io.filesは明確に述べている:By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

また、私はインストールして、ショートカットの作成を可能にするためのIzPackを使用しています。

私はデスクトップのショートカットを取得し、上記のファイルおよびフォルダの作成はのIzPackは、JARをインストールした場所にある、インストール後に、私のXPのコンピュータ上で自分のアプリケーションを実行していますよ。これは予想される動作です。

しかし、私はVistaマシン上でこれをテストするとき、フォルダとファイルがデスクトップに作成されます! Jarが正しい場所にあるにもかかわらず(c:\ program files .. etc)。

私は、これらのファイルは、JARがデスクトップにであり、そして最も確かではない同じフォルダに作成することにしたいです。

誰も私にここで何が起こっているか上の任意の洞察力を与えることはできますか?

+2

ライティングをVistaのc:\ programファイルにはUACの同意が必要なので、システムはフォールバックとしてデスクトップを使用していると思われます。 –

+0

私はフォールバックを制御できると思いますか? – uzil24

+0

コアアプリライブラリなどの%PROGRAMFILES%の中にデフォルトのJavaアプリインストールを設定することはできます。しかし、** Windows/OS環境下で%PROGRAMFILES%の中に**ユーザ/データ設定**を保存する代わりに、 'System.getProperty(" user.home ")'または 'System.getenv(" USERPROFILE " ) 'あなたのJavaアプリケーションのための特別なフォルダを内部に入れておくと、ユーザ/アプリケーションが何かを変更しやすくなります。 –

答えて

1

JVMは、フォールバックとして次の書き込み可能な場所を探しますので、ビスタ/七で、Program Filesフォルダへの書き込みは、管理者の干渉を必要とするためにです:デスクトップ(またはユーザーのドキュメントディレクトリ)。すべてのOSで統一された方法でユーザのホームディレクトリを簡単に判断することができますが、これはJVMがうまくいけば妥当な場所を選択するよりも優れています。

これは、それが解決しない場合は、フォールバックが正しいユーザーのホームフォルダを指す必要があるシステム環境変数USERPROFILEチェックすることで、Windows上でJVM用known bugですので:

String userHome = System.getenv("USERPROFILE"); 
+0

私はこれを考慮に入れなかった。ユーザーのホームディレクトリを使用する際の1つの問題は、アンインストールの問題です。そのようなファイルを削除するにはどうすればいいのか分かりません。私はいくつかのアプリケーションがそれらの背後にフォルダを残す傾向があることを知っている。私は決してそれを好まなかった。 – uzil24

+1

テンポラリファイルを作成し、その親フォルダが予期したものであるかどうかをチェックし、失敗した場合は別の場所を選択することで、選択したフォルダが書き込み可能かどうかを簡単に確認できます。 –

+0

OK、相対パスの代わりに "user.dir"を使用するようにアプリケーションを修正しました。結果は災害です。デスクトップのショートカットを使用すると、フォルダがデスクトップ上に作成されます。 「すべてのプログラム」メニューのショートカットを使用すると、フォルダはc:\ docに作成され、\ userの場所に設定されます。 jarをc:\ program files \ app_nameの場所から直接実行すると、Jarファイルは必要なだけ実行されます。 「user.home」を使用すると、その都度同じ結果が得られます。 jarファイルの場所でアプリケーションを実行させるにはどうすればよいですか? – uzil24

関連する問題