我想执行一个setup.exe安装程序,它使用java 1.6在vista上安装软件。
用户不是管理员。当我尝试启动该过程时,我收到错误消息:
CreateProcess error=740
表示用户没有足够的权限启动该过程。
我可以提交一个标志或选项来表明,该过程应该以管理员权限执行吗? Vista本身在菜单工具栏中具有此功能。我可以在Java中使用此功能。
我调用以下代码
Runtime rt = Runtime.getRuntime();
Process process;
try {
String fileToExecute = new File(mFolder, mSetupFiles[0]).getCanonicalPath();
if (logger.isDebugEnabled()) {
logger.debug("Execute runtime process");
}
process = rt.exec(fileToExecute, null, mFolder);
process.getErrorStream().close();
process.getInputStream().close();
process.getOutputStream().close();
if (logger.isDebugEnabled()) {
logger.debug("Wait until process is finished");
}
process.waitFor();
} catch (IOException e) {
throw new StartException(e);
} catch (InterruptedException e) {
throw new StartException(e);
}
答案 0 :(得分:3)
答案 1 :(得分:2)
经过2天的测试后,我找到了以下解决方案。
启用Vista UAC功能时出现错误。当进程需要管理员权限时,UAC每次都会显示一个问题对话框。
显示此对话框会导致问题。
而不是使用旧的
process = rt.exec(fileToExecute, null, mFolder);
命令,我现在正在使用新的1.5 ProcessBuilder命令
修改强>
要避免此问题,您必须打开一个请求权限的命令窗口。而且你必须打电话给外部过程。
ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute });