我有一个定期更新的网络小程序,我最终决定制作更新程序。但是,当我在java中下载更新时,它下载得很好。但是,当我尝试使用Runtime.getRuntime().exec(pathToFile);
解压缩+运行更新时,我得到CreateProcess error=740, The requested operation requires elevation
如果程序是网络小程序,我该如何解决这个问题?我不能告诉他们将浏览器作为管理员运行。我该如何解决这个问题?
答案 0 :(得分:33)
使用.exec(cmd)
时,请在命令前添加cmd /c
前缀,以便最终获得rt.exec("cmd /c <your command>")
之类的内容。这将启动该过程并在需要时调用UAC。
答案 1 :(得分:6)
我的一个朋友在一个月前遇到了同样的问题(他通过.exe文件展开更新),我记得这个链接对他有很大帮助:http://mark.koli.ch/2009/12/uac-prompt-from-java-createprocess-error740-the-requested-operation-requires-elevation.html
我会在你的问题下做一个简单的评论(似乎不值得直接回答/解决方案),但我还没有足够的回复评论。 :-P
答案 2 :(得分:3)
围绕我们的一位工程师进行的一项手册工作发现,如果不是您的应用程序,请启动cmd提示,右键单击该窗口并单击“以管理员身份运行”菜单项。在我的情况下运行.jnlp文件工作!
答案 3 :(得分:1)
当尝试使用命令运行应用程序时,我也遇到了这样的问题:
cmd /c start <exe_file>
此命令无法运行需要管理员访问权限的可执行文件。 而是使用
rundll32 url.dll,FileProtocolHandler <exe_file>
命令解决了我的问题。此命令会触发UAC提示,因此用户可以在启动应用程序之前提供正确的访问权限。
在我的应用中,我使用了PrecessBuilder::start()
功能。此函数返回java.lang.Process
实例,该实例将处于活动状态(process.isAlive() == true
),直到用户处理UAC提示符为止,因此最好添加一些循环以等待,直到确定应用程序已启动为止。
答案 4 :(得分:0)
原因:
当您尝试运行应用程序时,IDE会尝试启动adb,但最终会出现740进程错误或adb down,因为您的IDE不允许从sdk文件夹中的平台工具运行adb.exe文件。
解决方案:
黄金提示 - 始终以管理员身份运行您的eclipse,sdk管理器,命令提示符,以便您的系统为特定应用程序提供完全权限。
在窗口7 64位上测试
设备三星4.4 eclipse ide
答案 5 :(得分:0)
我有同样的问题,通过以管理员身份运行java应用程序来解决它, 使其成为永久性:右键单击您的应用程序,转到属性&gt;兼容性&gt;选中“以管理员身份运行此程序”
(我有一个批处理文件运行Java.exe -jar ....)
答案 6 :(得分:0)
我也遇到过这个问题,但是当尝试使用前缀运行 Runtime.getRuntime().exec(filepath)
时
“cmd /c”到它完美运行的文件路径
你的代码应该像 Runtime.getRuntime().exec("cmd /c <filepath>")
注意: filepath-定位文件所需的完整目录列表
在我的代码中:
String filepath="C:\\Users\\MSI\\Downloads\\AutomationInstaller.exe"
答案 7 :(得分:-1)
如果问题出在Android Studio上,那么杀死adb.exe的任何实例都可以解决。