java - 从不同的安全上下文运行 VBS 脚本

标签 java windows cmd vbscript outlook

我想从我的 java 应用程序自动创建新电子邮件。为此,我正在生成一个 VBS 脚本,它将收集所有信息(电子邮件内容、主题、附件等),并将生成 VBS 脚本,该脚本将从 Outlook 打开一个新的电子邮件 View ,其中所有字段都正确。(我不知道)不想自动发送电子邮件,只想在 Outlook 客户端中创建一封新邮件。)下面您可以看到我如何从 java APP 运行脚本:

Runtime.getRuntime().exec("wscript " + nameOfScript);

我的 Java 应用程序始终以管理员权限运行。 当用户使用管理员权限打开 Outlook App 应用程序时,一切正常。
当用户在没有管理员权限的情况下打开 Outlook App 应用程序时,该脚本将不再起作用。它将在以下行失败:

Set Outlook = GetObject(, "Outlook.Application")

错误代码为 429 -> https://support.microsoft.com/en-ca/help/828550/you-receive-run-time-error-429-when-you-automate-office-applications

似乎因为我使用管理员权限运行脚本,所以如果 Outlook 在没有管理员权限的情况下运行,GetObject 函数将始终失败。

这个问题有解决方法吗?

预先感谢您的帮助!

最佳答案

你可以从Windows使用runas服务,你的命令将变成这样

String command = "runas /user:"+domain+"/"+user+" \"wscript C:\\Path\\to\\your\\script.vbs\"";

不好的部分是 runas 命令需要用户密码,最糟糕的部分是您无法通过 Java 进程提供它。 必须从键盘输入。

这不会起作用:

       while ((line = is.readLine()) != null)
       {
           System.out.println(line);
           if(line.toLowerCase().matches(".*enter.*password.*"))
           {
               System.out.println("Writing password for the user");
               os.write(password);
               os.write(System.getProperty("line.separator"));
               os.close();
           }
       }

你可以做的是:

  • 用上面的runas命令编写一个.bat文件来执行它并让
  • 用户在 cmd 窗口中输入密码

关于java - 从不同的安全上下文运行 VBS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53523059/

相关文章:

windows - 如何使用 AutoIt 在 Windows 中打开 "Run Window"?

python - 来自 C (Visual Studio) 的 CMD 命令

java - 错误 : The constructor MainActivity. ScreenSlidePagerAdapter(FragmentManager) 未定义

c++ - 递归文件搜索

java - 如何在hibernate连接映射上指定固定参数?

windows - %variable% 和 !variable! 之间的区别在批处理文件中

在后台以静默模式运行我的 installer.exe 文件的 C# 代码,

batch-file - Windows CMD/BATCH 命令 - 显示匹配上/下行的 FC 命令

java - Gson无法序列化

java - 在 Java 中使用 InetAddress 进行 nslookup 时如何绕过主机文件