【问题标题】:install4j packaged application requires administrator access to access disk on windows 7install4j 打包的应用程序需要管理员访问权限才能访问 Windows 7 上的磁盘
【发布时间】:2012-06-29 11:42:59
【问题描述】:

我们正在使用 install4j 为 Windows 打包 Java 7 应用程序。我们遇到的问题是,在我的 Windows 7 计算机上,我需要以管理员身份运行已安装的应用程序才能正常工作。它在需要访问磁盘的地方失败。如果我以管理员身份运行它,那么它工作正常。

有没有办法解决这个问题?我使用了与 install4j 和访问磁盘一起打包的其他应用程序,我不需要以管理员身份运行,所以我怀疑我想要的是可能的。

提前谢谢你。

【问题讨论】:

  • 你的应用程序是做什么的?这个问题的答案对于解决您的问题至关重要。您的应用程序是否写入受系统保护的文件夹,例如 Program Files?如果是,则修改应用程序以将其数据存储在普通用户可以访问的位置。常规应用程序不需要管理员权限即可访问磁盘上的文件。
  • Alexey,是的,我的应用程序写入程序文件。我得找个地方写信。是否有定义我可以写入的目录的系统属性?
  • Program Files 写信已经被劝阻很久了,但是直到Vista 引入UAC 之前没人真正关心过。在哪里写入取决于数据的性质。在 Windows 中,您可以将应用程序数据存储在用户配置文件 AppData 目录中。如果数据应该由多个用户访问,ProgramData 是更好的选择。 Windows 有获取这些位置路径的 API,而 Java 没有。如果数据是临时的,Temp 目录是正确的选择。要保存首选项,请使用Preferences 类。
  • 顺便说一句,它看起来对AppData 的引用存储在APPDATA 环境变量中用于漫游数据,LOCALAPPDATA 用于仅本地设置;在ProgramData 中进行机器本地设置。我不确定这些变量在每个 Windows 系统上是否一致设置。查看this answer 了解有关 Win API 的更多信息。
  • 再次非常感谢。我注册了你的博客。

标签: java installation install4j


【解决方案1】:

它是什么类型的应用程序?通常所有应用程序都将安装在C:\Program Files 文件夹中。并且可能 install4j 会尝试将您的应用程序安装到 C:\Program Files 文件夹。

普通用户(不是管理员)无权更改此目录,也不会在那里创建新文件夹。

是否需要安装应用程序,或者只需将其包装在 exe 文件中即可启动?

如果安装是强制性的,即您需要系统文件夹,访问系统 dll,则需要管理员权限,这是合乎逻辑的。

如果您可以省略安装并使用可移植的 exe 文件,则为 java 应用程序使用 exe-wrapper。例如 - JSmooth

【讨论】:

  • 非常感谢您的回复。我认为你一针见血。我将它安装在程序文件中并写入已安装目录中的文件。那么我可以将存储的数据放在哪里?
  • 存储数据考虑当前用户主文件夹,可以通过user.home系统属性获取。允许在没有管理员权限的情况下写入此目录。在 Windows 用户主文件夹中,'someuser' 是:'C:\Documents & Settings\someuser'。在用户主目录中创建一个文件夹,比如说“C:\Documents & Settings\someuser\myapplication”并将您的日期存储在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多