我需要從我的應用程序調用第三方C++ exe(提供一個OLE自動化接口)。我希望能夠同時運行我的應用程序的多個實例。我所調用的第三方應用程序可以選擇針對不同的數據庫運行。C#強制實例化外部exe
如果我針對同一個數據庫運行我的應用程序(調用第三方應用程序)的多個實例,一切都很好。
如果我嘗試運行對一個數據庫,一個實例和對另一個數據庫中,我得到以下錯誤另一個實例:
服務器引發了異常。 (異常從HRESULT:0x80010105(RPC_E_SERVERFAULT))
我懷疑這是由於第二個實例沒有創建第三方應用程序的新實例,但使用相同的實例作爲我的應用程序的第一個副本。
聽起來可能?我懷疑,如果我看任務管理器,我只能看到在後臺進程中運行的第三方應用程序的副本,但在應用程序中運行我的應用程序的兩個副本。
那麼,我該如何強制我的應用程序創建第三方應用程序的第二個實例?
代碼:
Type tpType = Type.GetTypeFromProgID("thirdPty.Application");
dynamic comObject = Activator.CreateInstance(tpType);
try
{
bool success = comObject.LoadDatabase(dbPath);
if (success)
{
var newTp = comObject.Open(inputFile);
newTp.Run(runType);
while (newTp.IsBusy)
{
// wait for process to finish
Thread.Sleep(500);
}
newAb.Export(outputFolder + "\\output" + " " + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".csv");
newAb.Close();
}
}
首先,確保第三方應用程序旨在同時運行多個實例。您可能被迫使用不同的參數運行應用程序的相同實例以獲得所需的效果。 –
第三方應用程序可以通過它自己的用戶界面運行,並且可以在不同的數據庫上同時愉快地運行 –