[英]C# Force instantiation of external exe
我需要從我的應用程序調用第三方c ++ exe(提供OLE自動化接口)。 我希望能夠同時運行我的應用程序的多個實例。 我調用的第三方應用程序可以選擇針對不同的數據庫運行。
如果我在同一個數據庫上運行我的應用程序(稱為第三方應用程序)的多個實例,則一切正常。
如果我嘗試對一個數據庫運行一個實例,對另一個數據庫運行另一個實例,則會收到以下錯誤:
服務器引發異常。 (來自HRESULT的異常:0x80010105(RPC_E_SERVERFAULT))
我懷疑這是由於第二個實例沒有創建第三方應用程序的新實例,而是使用了與我的應用程序的第一個副本相同的實例。
聽起來可能嗎? 我懷疑好像在任務管理器中查看一樣,我只能看到在后台進程中運行的第三方應用程序的一個副本,但是在Apps中運行的我的應用程序的兩個副本。
那么,如何強制我的應用創建第三方應用的第二個實例?
碼:
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();
}
}
我認為你不能。 調用Activator.CreateInstance
, 由(D)COM服務器決定如何實例化其Application COM對象。
顯然,這是向REGCLS_MULTIPLEUSE
注冊的,這意味着將從同一服務器進程提供多個實例。 可以假設,如果這是COM服務器的設計行為,則在為每個Application對象使用不同的數據庫連接時,它也應該表現良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.