用Java检测应用程序的安装路径?

时间:2010-04-19 19:44:36

标签: java windows

我在Java中创建了一个小应用程序,我想使用Nullsoft Scriptable Install System(http://nsis.sourceforge.net/Main_Page)为它创建一个Windows安装程序。

我制作的应用程序需要在某处保存用户首选项,并且它当前将其保存在用户的主目录中(例如c:\ Users \ danny或/ home / users / danny)。但是,如果Windows安装程序将应用程序安装到例如c:\ Program Files \ whatever \我也应该在那里保存首选项文件,对吗?

我如何在Java中检测到该目录路径?什么是一个很好的跨平台方法,而不会失去Windows用户的Windows卸载程序的好处,例如开始菜单图标,安装程序选项等?

我应该继续在用户的主路径中保存我的偏好并使其混乱吗?

非常感谢,

3 个答案:

答案 0 :(得分:4)

保存用户首选项的最佳位置是用户主目录。 从安全的角度来看也很好。

从java获取路径:

System.getProperty("user.home");

它是跨平台的。 (Linux中的/ home / username(或者像这样取决于操作系统配置)Windows中的C:\ Documents和Seetings \ username)

更多属性:http://www.mindspring.com/~mgrand/java-system-properties.htm

另外,请确保您的应用具有足够的权限(对于应该签名的applet)

答案 1 :(得分:3)

我会坚持使用用户的主目录来保存首选项。

或者,您可以使用Preferences API

使用首选项API,您可以存储应用程序和用户首选项。缺点是实现控制着这些文件的存储位置。默认情况下,在Windows中它使用注册表。

import java.util.prefs.Preferences;

// System node
Preferences systemPrefs = Preferences.systemNodeForPackage(YourClass.class);
// User node
Preferences userPrefs = Preferences.userNodeForPackage(YourClass.class);

systemPrefs.put("My Preference", "A string");
String myPreference = systemPrefs.get("My Preference");
userPrefs.putInt("A number", 1);
int aNumber = userPrefs.getInt("A number");

答案 2 :(得分:2)

  

但是如果是Windows安装程序   将应用程序安装到例如   c:\ Program Files \ whatever \ I \ I   可能保存首选项文件   那里,对吗?

不,你绝对不应该。计算机可以有多个用户,普通用户帐户没有对程序安装目录的写访问权限。编写代码的短视程序员假设计算机只有一个用户可以执行所有操作,这就是为什么有这么多糟糕的应用程序导致无法在正确安全的配置中运行Windows XP并且需要Vista和Windows 7做奇怪的解决方法的原因

用户的主目录正好是首选项文件的正确位置 - 这样,它们也将被备份(没有人想要备份程序二进制文件)。另外,请考虑使用Java preferences API而不是浪费时间来实现自己的方案。