2010-09-23 3 views
1

J'ai un morceau de code pour ouvrir une instance d'un objet COM et effectuer différentes tâches. Mon problème est que si l'application que j'ouvre avec COM est déjà en cours d'exécution puis je réutilise cette instance. Je voudrais toujours avoir une nouvelle instance et travailler avec cela et enfin fermer. De toute façon pour faire ça?Activator.CreateInstance mon instance?

Type t = System.Type.GetTypeFromProgID("QlikTech.QlikView"); 
QlikView.Application app = (QlikView.Application)Activator.CreateInstance(t); 
app.OpenDocEx("c:\\test.qvw",1,false,null,null,null,true); 
String script = app.ActiveDocument().GetScript(); 
StreamWriter outfile = new StreamWriter("c:\\test.qvw.txt"); 
outfile.Write(script); 
outfile.Close(); 
app.Quit(); 

Répondre

3

Ceci est une propriété du serveur COM lui-même. La valeur qu'il passe pour l'argument indique dans l'appel CoRegisterClassObject(). On dirait qu'il passe REGCLS_MULTIPLEUSE, ce qui n'est pas rare, car il peut être coûteux de démarrer un nouveau processus pour chaque client individuel.

Le client ne peut pas modifier ce comportement. Vous aurez besoin de l'aide du fournisseur, peut-être qu'il y a un fichier de configuration.

+0

+1. Et dans certains cas, REGCLS_MULTIPLEUSE peut être requis, c'est-à-dire que le service fourni peut nécessiter que toutes les instances soient traitées à partir du même processus. – Joe

Questions connexes