4

我想执行一个 setup.exe 安装程序,它使用 java 1.6 在 vi​​sta 上安装软件。

用户不是管理员。当我尝试启动该过程时,我收到错误消息:

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);
        }
4

2 回答 2

3

(我还没有尝试过),但您似乎可以使用此处的“提升”程序执行此操作

另请阅读内容以了解 UAC 概述

于 2009-09-14T12:02:01.913 回答
2

经过2天的测试,我找到了以下解决方案。

激活 Vista UAC 功能时会出现该错误。当进程需要管理员权限时,UAC 每次都会显示一个问题对话框。

显示此对话框会导致问题。

而不是使用旧的

process = rt.exec(fileToExecute, null, mFolder);

命令,我现在正在使用新的 1.5 ProcessBuilder命令

编辑:

为避免该问题,您必须打开请求权限的命令窗口。而且你必须调用外部进程。

ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute });

此处还描述了执行外部程序

于 2009-09-15T08:18:07.193 回答