{"id":68,"date":"2011-01-14T18:25:25","date_gmt":"2011-01-14T17:25:25","guid":{"rendered":"http:\/\/blog.kalmbach-software.de\/de\/2011\/01\/14\/regfree-com-activation-und-pfad-zu-einem-anderen-verzeichnis-unit-tests\/"},"modified":"2011-01-14T18:25:25","modified_gmt":"2011-01-14T17:25:25","slug":"regfree-com-activation-und-pfad-zu-einem-anderen-verzeichnis-unit-tests","status":"publish","type":"post","link":"http:\/\/blog.kalmbach-software.de\/de\/2011\/01\/14\/regfree-com-activation-und-pfad-zu-einem-anderen-verzeichnis-unit-tests\/","title":{"rendered":"RegFree COM Activation und Pfad zu einem anderen Verzeichnis \/ Unit-Tests"},"content":{"rendered":"<p>Ich hatte hier das Problem, dass wir in einen VIsual Studio Unit Test eine COM-DLL verwenden m\u00fcssen. Diesen wollen wir aber nicht auf dem Build-Server registrieren. Um dies zu umgehen, hab ich mittels CreateActCtx \/ ActivateCtx \/ usw. eine Klasse gemacht, mit der man ein Manifest zur Laufzeit aktivieren kann. Jetzt war aber das Hauptproblem, dass die Unit-Tests ja von einer Applikation ausgef\u00fchrt werden, auf dessen Verzeichnis wir keinen Zugriff haben. Im Internet hab ich aber immer nur Beispiele gefunden, wo die COM-DLL im gleichen Verzeichnis wie die EXE lag. Dies geht hier aber nicht, sondern die DLL muss mit einem &#8220;DeployItem&#8221; auch in das entsprechende Out-Verzeichnis kopiert werden und von dort muss diese COM-DLL dann geladen werden. D.h. das Manifest muss auf diese Datei zeigen.<br \/>\nIch hab das nicht hinbekommen&#8230;. mein erster Versuch war das &#8220;lpAssemblyDirectory&#8221; Feld in der ACTCTX Struktur zu setzen. Damit hab ich es aber nicht hinbekommen; hab alles erdenkliche versucht&#8230; er hat immer gemeldet, dass er die Datei nicht finden kann&#8230;<br \/>\nDann hab ich es in der Manifest-Datei selber probiert. Dort hab ich es nur hinbekommen, wenn der <code>&lt;file name=\"NameDer.dll\"&gt;<\/code> auf den relativen Pfad ge\u00e4ndert hab, also: <code>&lt;file name=\"test\\NameDer.dll\"&gt;<\/code>.<br \/>\nAber sobald ich einen vollst\u00e4ndigen Pfad angegeben hab, ging es nicht mehr&#8230; ich bin fast verzweifelt&#8230;<br \/>\nDann endlich kam ich drauf (keine Ahnung wie): Man muss den ganzen Pfad angeben, aber f\u00fcr jeden Slash jeweils *zwei* einf\u00fcgen! Also:<br \/>\n<code>&lt;file name=\"C:\\\\Temp\\\\Test\\\\NameDer.dll\"&gt;<\/code><br \/>\nUnd siehe da: Es funktioniert, auch wenn die DLL nicht im entsprechenden EXE-Verzeichnis liegt.<\/p>\n<p>Somit k\u00f6nnen wir jetzt Unit Tests erzeugen, welche eigentlich eine Registrierung von COM-DLLs auf dem Server verlangt h\u00e4tten.<\/p>\n<p>Mehr Infos dazu siehe:<br \/>\n<a href=\"https:\/\/cfx.svn.codeplex.com\/svn\/Visual%20Studio%202008\/CSRegFreeCOMClient\/Program.cs\">https:\/\/cfx.svn.codeplex.com\/svn\/Visual%20Studio%202008\/CSRegFreeCOMClient\/Program.cs<\/a><br \/>\n<a href=\"http:\/\/www.mazecomputer.com\/sxs\/help\/sxsapi2.htm\">http:\/\/www.mazecomputer.com\/sxs\/help\/sxsapi2.htm<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich hatte hier das Problem, dass wir in einen VIsual Studio Unit Test eine COM-DLL verwenden m\u00fcssen. Diesen wollen wir aber nicht auf dem Build-Server registrieren. Um dies zu umgehen, hab ich mittels CreateActCtx \/ ActivateCtx \/ usw. eine Klasse gemacht, mit der man ein Manifest zur Laufzeit aktivieren kann. Jetzt war aber das Hauptproblem, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6,3],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-alles-uber-dotnet-programmierung","category-tfs","category-alles-uber-die-echte-windowsprogrammierung"],"_links":{"self":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":0,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}