2011-07-21 65 views
1

GlassFish Application Server使用腳本asadmin.bat,該腳本依次啓動JVM。如何使用jinterop調用遠程bat文件

我想在遠程機器上使用Java中的jinterop和DCOM調用此腳本。我無法找到任何有關此特定用法的幫助。任何幫助將不勝感激。

+0

Björn - 你是我的新英雄!這一切都很完美。非常感謝。我沒有足夠的積分給你點 - 遺憾的是... – codeplumber

回答

4

我使用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")}); 

如果您需要從批量輸出,你可以使用標準輸出的閱讀。

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()); 
} 
+0

我解決了多層防火牆後,它工作得很好。 但是這個變量來自哪裏: wbemObjectSet_dispatch – codeplumber

+0

好的,我忘了行'最終IJIDispatch wbemObjectSet_dispatch =(IJIDispatch)JIObjectFactory.narrowObject((results [0])。getObjectAsComObject());'所以它來自結果數組。 –

+0

我在運行時遇到錯誤,是否必須啓用「使用代理進程」標誌? –