C#强制实例化外部exe

C# Force instantiation of external exe

我需要从我的应用程序调用第三方 c++ exe(提供 OLE 自动化接口)。我希望能够同时 运行 我的应用程序的多个实例。我调用的第三方应用程序可以选择 运行ning 针对不同的数据库。

如果我 运行 我的应用程序(调用第三方应用程序)的多个实例针对同一个数据库,一切都很好。

如果我尝试 运行 一个实例针对一个数据库,另一个实例针对另一个数据库,我会收到以下错误:

服务器抛出异常。 (HRESULT 异常:0x80010105 (RPC_E_SERVERFAULT))

我怀疑这是因为第二个实例没有创建第三方应用程序的新实例,而是使用与我的应用程序的第一个副本相同的实例。

这听起来有可能吗?我怀疑如果我在任务管理器中查看,我只能在后台进程中看到第三方应用程序 运行ning 的一个副本,但在应用程序中我的应用程序 运行ning 的两个副本。

那么,如何强制我的应用创建第三方应用的第二个实例?

代码:

 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 服务器 它如何实例化它的应用程序 COM 对象。

显然,这个是用 REGCLS_MULTIPLEUSE 注册的,这意味着多个实例将从同一个服务器进程提供服务。人们会假设,如果这是 COM 服务器的设计行为,那么在为每个应用程序对象使用不同的数据库连接时,它也应该表现得很好。