使用特定用户在java中运行jar

使用特定用户在java中运行jar,java,jar,runtime,execute,updates,Java,Jar,Runtime,Execute,Updates,让我解释一下问题: 上下文 我有一个要更新的应用程序。它调用了我也制作的更新程序jar。更新程序将杀死运行旧版本的应用程序,并使用新版本启动新的应用程序 问题 除非我自己运行jar,否则新版本不会启动。增加睡眠并不能解决问题 假设 也许运行更新程序应用程序的用户是java,它没有运行新版本的权限 我用我的用户运行第一个java,而这个java应用程序用“java用户”运行jar,java用户不能运行新版本 当我在运行时运行jar时,有没有一种方法可以指定一个用户 Runtime.getRunti

让我解释一下问题:

上下文

我有一个要更新的应用程序。它调用了我也制作的更新程序jar。更新程序将杀死运行旧版本的应用程序,并使用新版本启动新的应用程序

问题

除非我自己运行jar,否则新版本不会启动。增加睡眠并不能解决问题

假设

也许运行更新程序应用程序的用户是java,它没有运行新版本的权限

我用我的用户运行第一个java,而这个java应用程序用“java用户”运行jar,java用户不能运行新版本

当我在运行时运行jar时,有没有一种方法可以指定一个用户

Runtime.getRuntime().exec("C://Temp//myapp.jar");

如果您使用的是Windows环境,尝试以下操作可能会有助于您解决问题

在windows system32路径上尝试该命令

runas /showtrustlevels
您应该得到如下内容:

C:\Windows\system32>runas /showtrustlevels
The following trust levels are available on your system:
0x20000 (Basic User)
然后,您将获取“Basic User”的值,并运行类似以下的操作来启动jar:

runas /trustlevel:0x20000 "java -jar yourfileName.jar"

或者你可以试试这个,它可能有用

windows或linux?新版本不启动是什么意思?它在Windows上不起作用:Runtime.getRuntime().exec(“runas/user:+usilisateur+”\“C:\\somewhere\\dfs\\app.exe\”);此进程proc=Runtime.getRuntime().exec(“runas/user:+usilisateur+“\”java-jar C:\\somewhere\\dfs\\app.jar\”);MyAppV100需要更新。它接收带有特定操作的命令。它调用的更新程序是一个外部jar。更新程序杀死MyAppV100并启动MyAppv200(但除非我手动调用更新程序,否则它永远不会启动):(谢谢!我认为您需要通过Java运行Jar,类似于Java-Jar myApp.Jar(显然您需要为Jar文件的位置提供上下文)。您还应该使用ProcessBuilder,这将使您的生活更轻松;)