Java中是否有办法要求系统控制管理员功能.当然没有这样做:右键单击exe - >以管理员身份运行.
我想要的是来自UAC的框架,如Windows Vista或Windows 7.
或者我从jar中制作exe时要做一些设置?
我的软件突然出现了一个令人讨厌的问题.我正在制作一个与另一个现有软件(游戏)交互的程序.用户报告说他以管理员权限运行游戏,在这种情况下,我的程序停止为他工作.
简短的调查显示,有些人确实需要在管理员帐户下运行游戏,有些则不需要.如果我的程序能够检测到这一点并且警告用户游戏是否在管理员帐户下运行,那将是很棒的:

如果用户单击"Elevate",我想要求windows提升java.exe运行我的jar文件并调用典型的UAC对话框.

显然,这次问题不是关于java更新程序而是JRE
我的问题是:这可能吗?Windows可以提升我java.exe实例的权限吗?java有办法吗?或者我可以使用命令行命令吗?
我想避免重新启动程序(尽管它可能不是那么重要).
编辑:
如果您查看注释,您将看到无法避免重新启动应用程序 - 进程只能启动升级而不会升高.不幸的是,这有点改变了这个问题.基本上,现在听起来更像是:" 如何使用管理员权限重新启动我的应用程序? ".当然,除非有两个java.exe共享一个罐子的技巧......
Files.walk(Paths.get("/var/")).count()当作为非特权用户运行时,执行可能会抛出异常,因为内部/var/存在需要遍历root权限的文件夹.
我不是在寻找以root(例如sudo find /var),使用Process等方式执行bash命令的方法.
我只是想确保Files.walk(Paths.get("/var/")).count()不抛出AccessDeniedException:
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0
at sun.reflect.NativeMethodAccessorImpl.invoke
at sun.reflect.DelegatingMethodAccessorImpl.invoke
at java.lang.reflect.Method.invoke
at org.springframework.boot.devtools.restart.RestartLauncher.run
Caused by: java.io.UncheckedIOException: java.nio.file.AccessDeniedException: /var/cache/httpd
at java.nio.file.FileTreeIterator.fetchNextIfNeeded
at java.nio.file.FileTreeIterator.hasNext
at java.util.Iterator.forEachRemaining
at java.util.Spliterators$IteratorSpliterator.forEachRemaining
at java.util.stream.AbstractPipeline.copyInto
at java.util.stream.AbstractPipeline.wrapAndCopyInto
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential
at java.util.stream.AbstractPipeline.evaluate
at java.util.stream.LongPipeline.reduce
at java.util.stream.LongPipeline.sum
at java.util.stream.ReferencePipeline.count
at com.example.DemoApplication.main
... 5 more
Caused by: java.nio.file.AccessDeniedException: /var/cache/httpd
at sun.nio.fs.UnixException.translateToIOException
at sun.nio.fs.UnixException.rethrowAsIOException
at sun.nio.fs.UnixException.rethrowAsIOException
at sun.nio.fs.UnixFileSystemProvider.newDirectoryStream
at java.nio.file.Files.newDirectoryStream
at …Run Code Online (Sandbox Code Playgroud) 是否可以从Java应用程序中请求提升权限?我看到的建议似乎都集中在运行外部可执行文件或设置清单以请求启动权限.例如,这些小程序不可用.有没有办法从正在运行的应用程序请求提升?
我已经编写了一个包含自我更新程序的Java应用程序。自我更新程序从Web服务器加载新程序版本并替换应用程序文件。如果将应用程序安装在例如用户主目录中,则此方法非常有效,但如果将其安装在C:\ Program Files文件夹中,则在Windows计算机上将失败。这是因为JVM是在对程序目录没有写访问权的用户帐户下执行的。如果本机程序(例如安装程序)尝试写入程序文件夹,通常会出现一个弹出窗口,要求用户允许写入操作。Java应用程序不会发生这种情况。为什么?
有什么方法可以实现对受限文件夹的Java程序写操作会弹出安全弹出窗口,以便用户可以允许访问该文件夹?
感谢您的回复。根据答案,我看到以下选项:
Java Web Start
对我来说,这不是最终用户的选择。我认为没有人会期望普通的最终用户知道Java Web Start是什么,它有什么用处以及如何使用它,例如,我怀疑普通的Windows用户是否知道如何卸载Java Web Start应用程序。
使用带有清单文件的exe-launcher启动Java应用程序
据我了解,该解决方案是exe-launcher将在应用程序启动时请求扩展执行。这并不是我想要的,因为对于我的用例,如果有可用的更新而不是在每个应用程序启动时,获取扩展权限就足够了。
通过调用本机可执行文件执行更新操作
可以调用本机可执行文件以使其执行更新操作。这样,应用程序仅在有可用更新时才请求扩展权限。听起来不错,但是其中包括一些Windows的本机编码,在其他平台上不起作用。
在程序文件夹中安装启动器,在用户主目录中安装应用程序
可以将启动器放置在程序文件夹中,该程序文件夹调用在用户主目录中安装的应用程序。这样,可以更新用户主文件夹中的应用程序。我使用InnoSetup在Windows上安装应用程序,据我所知,使用此安装程序以及其他安装程序很难实现拆分安装。
在用户的主目录中安装完整的应用程序,因为用户对其主目录
具有写访问权,所以完全没有问题。对我来说,这似乎是其简单性的最佳选择。
我正在编写一个应用程序,它应该能够将文本文件保存到任何位置。当我在 Eclipse 中运行代码时,出现以下异常:
java.io.FileNotFoundException: C:\myFile.txt (Zugriff verweigert)
“Zugriff verwiegert”是德语,表示许可被拒绝。
不过,我可以写入C:\Users\MyUser\Documents。
我做了一些研究,发现应用程序需要管理员权限。如果这是真的,我如何在 eclipse 中以管理员身份运行它?
我写文件的代码:
try {
PrintWriter writer = new PrintWriter("C:\\myFile.txt", "UTF-8");
writer.print(script.toString());
writer.close();
} catch (FileNotFoundException | UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
编辑:Stackoverflow 将我的问题与以下问题相关联: 如何从 Java 提升我的 UAC 权限? 但是我想知道在eclipse中是否有可能!;D