gpt4 book ai didi

java - 写入 C :\Program Files from Java program

转载 作者:可可西里 更新时间:2023-11-01 14:04:11 26 4
gpt4 key购买 nike

我编写了一个包含 self 更新程序的 Java 应用程序。自更新程序从 Web 服务器加载新的程序版本并替换应用程序文件。如果安装了应用程序,这将完美地工作,例如在用户主目录中,如果它安装在 C:\Program Files 文件夹中,则在 Windows 机器上会失败。这是因为 JVM 是在对程序目录没有写权限的用户帐户下执行的。如果一个本地程序,例如安装程序尝试写入程序文件夹,通常会出现一个弹出窗口,要求用户允许写入操作。这不会发生在 Java 应用程序中。为什么?

有没有办法实现 Java 程序对受限文件夹的写入操作会弹出安全弹出窗口,以便用户可以允许访问该文件夹?


感谢您的回复。根据答案,我看到以下选项:

  1. Java 网络启动
    对我来说,这不是最终用户的选择。我认为没有人可以期望普通最终用户知道 Java Web Start 是什么、它有什么用处以及如何使用,例如我怀疑普通的 Windows 用户是否知道如何卸载 Java Web Start 应用程序。

  2. 使用带 list 的 exe 启动器启动 Java 应用程序
    据我了解这个解决方案,exe 启动器会在应用程序启动时请求扩展执行。这不是我想要的,因为对于我的用例来说,如果更新可用而不是在每次应用程序启动时获得扩展权限就足够了。

  3. 通过调用 native 可执行文件来执行更新操作
    可以调用 native 可执行文件以让它执行更新操作。以这种方式,应用程序只会在更新可用时请求扩展权限。这听起来不错,但包含一些适用于 Windows 的 native 编码,并且不适用于其他平台。

  4. 在程序文件夹中安装启动器,在用户主目录中安装应用程序
    可以在程序文件夹中放置一个启动器,调用安装在用户主目录中的应用程序。这样就可以更新用户主文件夹中的应用程序。我使用 InnoSetup 在 Windows 上安装我的应用程序,据我所知,使用此安装程序很难实现拆分安装,也可能使用其他安装程序。

  5. 在用户的主目录中安装完整的应用程序
    因为用户对其主目录具有写入权限,所以根本没有问题。对我来说,这看起来是最好的选择,因为它很简单。

最佳答案

如果您使用 inno setup compiler 来生成您的启动器,那么您可以更改您的应用程序目录权限。

比如你需要完全控制,想更新AppName/data文件夹下的文件

[Dirs]
Name: "{app}";
Name: "{app}\data"; Permissions: everyone-full

[Files]
Source: data\*; DestDir: {app}\data\; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full

关于java - 写入 C :\Program Files from Java program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com