【问题标题】:JAR executable doesn't start if it's in Programs directory如果 JAR 可执行文件位于 Programs 目录中,则它不会启动
【发布时间】:2011-11-16 05:47:57
【问题描述】:

我遇到了一个非常奇怪的问题,这让我发疯了 .-. 我在 Windows 上做一个比较大的 Java 项目,使用 NetBeans 和 IzPack 准备图形安装包。 一切正常,编译后的安装程序似乎可以工作,我的程序被复制到 'C:\Programs\MyProject' 文件夹中。

但是...当我双击该文件夹中的 myproject.jar 时,它根本没有启动。我显然试图打开一个提示并输入“java -jar myproject.jar”但什么也没有,甚至没有一行错误代码。 奇怪的事实有两个:

  • 如果我使用具有管理权限的提示打开它,它可以工作
  • 在同一文件夹中还有另一个 jar,即 izpack 创建的“uninstaller.jar”,双击即可使用。

我仔细检查了我的 JVM 安装、PATH/JAVA_HOME/... 值和我的 JAR 的 Properties->Security 选项卡,但是每种用户的执行/读/写权限都可以,而且是平等的到卸载程序。

那么问题是什么?谢谢

【问题讨论】:

    标签: java permissions executable uac izpack


    【解决方案1】:

    这几乎肯定是由 Vista 和 Windows 7 上的 Windows UAC 引起的。

    您的程序可能正在尝试写入与它安装在同一目录中的数据文件。

    在 Windows 上,行为良好的程序会写入用户或所有用户的应用数据目录。

    该目录的位置因 Windows 版本而异。

    您可以使用系统属性“user.home”来找到一个安全的地方来存储数据。

    您还可以从here 获取共享和每个用户程序数据文件夹的环境变量列表。

    【讨论】:

    • 是的,你是对的,我的程序读取/写入一个 HyperSQL 数据库文件,并且它在同一个目录中。我会尝试将此资源放在“user.home”中
    • 如果我把这些资源放在 C:\ProgramData 目录中呢?它认为这是一种更好的方法,但是 izPack 内置变量中没有关于该文件夹的引用...
    • @alessandro.francesconi 我添加了一个链接,您可以使用它来获取 ProgramData 的位置。实际路径因使用的 Windows 版本而异,因此您不想硬编码 c:\ProgramData。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2019-07-21
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2013-04-20
    • 2013-08-12
    相关资源
    最近更新 更多