C#强制外部exe的实例化

时间:2016-09-18 17:35:00

标签: c# ole

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

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

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

服务器引发了异常。 (来自HRESULT的异常:0x80010105(RPC_E_SERVERFAULT))

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

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

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

代码:

timeit

1 个答案:

答案 0 :(得分:1)

我认为你不能。当你调用Activator.CreateInstance时,它是直到(D)COM服务器它如何实例化它的应用程序COM对象。

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