2016-09-18 3 views
0

Ich muss eine Drittanbieter-C++ - Exe (die eine OLE-Automatisierungsschnittstelle darstellt) aus meiner App aufrufen. Ich möchte mehrere Instanzen meiner App gleichzeitig ausführen können. Die Third-Party-App, die ich anrufe, hat die Option, gegen verschiedene Datenbanken zu laufen.C# Force Instanziierung der externen exe

Wenn ich mehrere Instanzen meiner App (die die Drittanbieter-App aufruft) für dieselbe Datenbank ausführen, ist alles in Ordnung.

Wenn ich versuche, und führen Sie eine Instanz gegen eine Datenbank und eine andere Instanz gegen eine andere Datenbank, die ich die folgende Fehlermeldung erhalten:

Der Server hat eine Ausnahme. (Ausnahme von HRESULT: 0x80010105 (RPC_E_SERVERFAULT))

Ich vermute, dass es aufgrund der zweiten Instanz keine neue Instanz der Drittanbieter-App erstellt, sondern die gleiche Instanz wie die erste Kopie meiner App verwendet.

Klingt das wahrscheinlich? Ich vermute, dass ich, wenn ich im Task-Manager nachschaue, nur eine Kopie der Drittanbieter-App sehen kann, die im Hintergrund läuft, aber zwei Kopien meiner App in Apps läuft.

Also, wie zwinge ich meine App, eine zweite Instanz der Drittanbieter-App zu erstellen?

Code:

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(); 
      } 
} 
+0

Stellen Sie zunächst sicher, dass die 3rd Party App so ausgelegt ist, dass mehrere Instanzen gleichzeitig ausgeführt werden. Möglicherweise müssen Sie die gleiche Instanz der App mit verschiedenen Parametern ausführen, um den gewünschten Effekt zu erzielen. –

+0

Die Third-Party-App kann über ihre eigene Benutzeroberfläche ausgeführt werden und läuft gleichzeitig problemlos auf verschiedenen Datenbanken –

Antwort

1

Ich glaube nicht, Sie können. Wenn Sie Activator.CreateInstance anrufen, ist es bis zum (D) COM-Server, wie es seine Anwendung COM-Objekte instanziiert.

Anscheinend ist dieser mit REGCLS_MULTIPLEUSE registriert, was bedeutet, dass mehrere Instanzen von demselben Server-Prozess bedient werden. Man würde annehmen, dass, wenn das Verhalten des COM-Servers entworfen wird, es sich auch gut verhalten sollte, wenn für jedes Anwendungsobjekt unterschiedliche Datenbankverbindungen verwendet werden.

Verwandte Themen