2012-12-10 56 views
0

我正在嘗試使用Jacob這個COM橋接器來調用現有的VFP 6應用程序。停止VFP在出現錯誤時顯示對話框

val vfp = new Application(new ActiveXComponent("VisualFoxPro.Application").getProperty("Application").toDispatch()) 
vfp.setVisible(false) 

try { 
    vfp.doCmd("do my.exe with myconfig.txt") 
} catch { 
    case t: Throwable => t.printStackTrace 
} finally { 
    vfp.doCmd("close data") 
    vfp.doCmd("clear all") 
    vfp.doCmd("clear") 
    vfp.quit 
    vfp.safeRelease 
} 

當沒有錯誤條件時,此代碼執行良好並生成預期的.dbfs。問題是,當發生錯誤(找不到.dbf文件,其他用戶正在使用的文件等)時,會彈出一個GUI窗口並停止程序的執行,直到我使用鼠標取消它爲止。我希望這個程序在沒有用戶交互的服務器上運行,所以這是行不通的。

我該如何優雅地處理錯誤,最好不要更改VFP 6程序?

+0

您是否有權訪問VFP6代碼以重新構建它? – DRapp

+0

是的,我有權訪問代碼。 – rancidfishbreath

回答

2

既然你有VFP6的源代碼,我會建議尋找到

SYS

Sys系統2335是用來識別如果程序是在「無人值守」模式運行(2335,0)任何這樣的彈出對話框都會引發錯誤並阻止實際的「點擊」確定/取消/任意按鈕繼續。這包括彈出窗口提示用戶選擇一張表。

由於我對它的使用有限,我不確定它何時可用。像你一樣,在IIS下處理COM服務器時,顯然沒有人會迴應。

+0

這正是我正在尋找的。 – rancidfishbreath

0

以無頭模式啓動JVM,捕獲HeadlessException或其他東西。或者,編寫一個Java程序,它將使用Runtime執行您的GUI程序,並在控制檯中解析錯誤的情況下重新啓動。

+0

HeadlessExceptions不會由VM以外的UI(例如由Runtime.exec或OLE啓動的那些UI)拋出。在控制檯中也沒有錯誤。 – rancidfishbreath