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 服务器的设计行为,那么在为每个应用程序对象使用不同的数据库连接时,它也应该表现得很好。
我需要从我的应用程序调用第三方 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 服务器的设计行为,那么在为每个应用程序对象使用不同的数据库连接时,它也应该表现得很好。