簡體   English   中英

C#強制實例化外部exe

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM