【问题标题】:How to call a remote bat file using jinterop如何使用 jinterop 调用远程 bat 文件
【发布时间】:2011-07-21 19:06:59
【问题描述】:

GlassFish Application Server 使用脚本 asadmin.bat 来启动 JVM。

我想在远程机器上使用来自 Java 的 jinterop 和 DCOM 调用此脚本。我找不到有关此特定用法的任何帮助。任何帮助将不胜感激。

【问题讨论】:

  • Björn -- 你是我的新英雄!这一切都很完美。非常感谢。我还没有足够的积分给你积分 - 很遗憾......

标签: batch-file dcom j-interop


【解决方案1】:

我使用 Windows Scripting Host Shell 在远程计算机上执行某些程序或批处理。

代码如下:

// Create a session
JISession session = JISession.createSession(<domain>, <user>, <password>);
session.useSessionSecurity(true);

// Execute command
JIComServer comStub = new JIComServer(JIProgId.valueOf("WScript.Shell"),<IP>, session);
IJIComObject unknown = comStub.createInstance();
final IJIDispatch shell =     (IJIDispatch)JIObjectFactory.narrowObject((IJIComObject)unknown.queryInterface(IJIDispatch.I ID));
JIVariant results[] = shell.callMethodA("Exec", new Object[]{new JIString("%comspec% /c asadmin.bat" )});

如果您需要批处理的输出,您可以使用 StdOut 来读取它。

JIVariant stdOutJIVariant = wbemObjectSet_dispatch.get("StdOut"); 
IJIDispatch stdOut =  (IJIDispatch)JIObjectFactory.narrowObject(stdOutJIVariant.getObjectAsComObject());

// Read all from stdOut
while(!((JIVariant)stdOut.get("AtEndOfStream")).getObjectAsBoolean()){ 
    System.out.println(stdOut.callMethodA("ReadAll").getObjectAsString().getString()); 
} 

【讨论】:

  • 解决了多层防火墙后效果很好。但是这个变量是从哪里来的:wbemObjectSet_dispatch
  • 好的,我忘记了'final IJIDispatch wbemObjectSet_dispatch = (IJIDispatch)JIObjectFactory.narrowObject((results[0]).getObjectAsComObject());'这一行所以它来自结果数组。
  • 运行此程序时出现错误,是否必须启用“使用代理进程”标志?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多