COM Server registrieren, aber wie?

RuFFnEcK

Erfahrenes Mitglied
Hallo zusammen,

ich arbeite grad an meiner Thesis und habe folgendes Problem:

Ich schreib grad an einem COM InProc Server in Form einer dll, es inzwischen wunderbar und jetzt geht es um das drum herum^^
Ich hab als Thema mit angegeben ein update Tool zu schreiben welches sich um die Verwaltung der verschiedenen Versionen kümmert.
Die dll ist selbstregistrierend, dass heißt er lässt sich automatisch mit "regsvr32 *.dll" in die Registry eintragen!
Aber ich hätte gern ein visuelles Tool welches welches einen Ordner mit allen verfügbaren Modulen beinhaltet, welche dann in einer Listbox zu Auswahl gelistet werden...
Im Prinzip muss der COM Server nur einmal registriert werden und dann immer nur die jeweilige dll ersetzen. Ich denke der "system32" Ordner ist der richtige Ort dafür!
Ich werde jetzt Anfangen ein Dialogfeldbasiertes Programm zu erstellen, aber meine Frage ist:
Wie kann ich Dateien hin und her kopieren und ersetzen und wie kann ich den regsvr32 mit Parametern aus dem Dialogprog heraus aufrufen?
Konsolen anwendung?
Man sieht ja oft bei Installationsroutinen, dass Dos fenster aufgehen...
Würde mich über jede Art von Hilfe freuen ;)
Vielleicht n ganz anderer Weg?

Danke im Vorraus und
Grüße

RuFF
 
Den "regsvr32" Befehl aufzurufen ist schon ein guter Weg. Bei Windows Programmen bietet sich da die Verwendung der Funktion "CreateProcess()" an. Ein Thread zu dieser Sache gab's gerade im Forum, siehe hier.

Regsvr32 läßt sich mit dem Parameter "/s" im silent mode ausführen, d.h es erscheinen dann keine Fenster.

Gruß
MCoder
 
@ MCoder

Vielen Dank für die schnelle Antwort und sorry für die späte Antwort meinerseits, hab ne Menge Stress im Moment!
Whatever, so hab ich mir das ganze auch vorgestellt nur dass ich regsvr32 nur so kenne, dass man in der Eingabeaufforderung in den jeweiligen Ordner geht in dem sich die dll befindet und von dort aus den befehl aufruft...
Würde es auch funktionieren, wenn ich regsvr32 als Parameter den kompletten Pfad der dll übergebe?
Werde es einfach ausprobieren...

Nur muss ich erstmal soweit kommen regsvr32 auf zu rufen :D
Weil ich steh erstmal vor dem Problem, dass ich die dll in den system32 Ordner kopieren muss.
Ich weiß gar net wie man Dateien kopiert, bzw. wenn schon vorhanden diese überschreibt...
Gibts bestimmt ne schöne Klasse zu die ich mal wieder nicht kenne :(
Aber ich denke das wird schon mit der Zeit *g*

Danke im Vorraus und Grüße

RuFF

Und da hab ich gleich nochmal eine Frage, wie kann ich ohn e verwalteten Code zu benutzen die Version einer dll ermitteln?
Ich würde gerne dem benutzer anzeigen welche Version bereits installiert ist...
Aber das ist eher optional, wichtiger ist es die Daten erstmal zu kopieren und
mit CFileFind kann ich mir ja das Erstellungs datum holen und vergleichen...
Aber wäre halt schön dem benutzer das noch anzeigen zu können^^
 
Zuletzt bearbeitet:
Hallo ich nochmal,

jetzt nochmal die Fragestellung klar formuliert:

Ich muss Dateien kopieren und ersetzen.
Hab dafür die Methode CopyFile gefunden, die sich aber wehement dagegen wehrt eine test.txt Datei zu kopieren und liefert immer false zurück...
Hab schon mehrere Arten die Verzeichnisse anzugeben probiert...

Code:
bool returnValue = CopyFile((LPCTSTR)"C:\\Programme\test.txt", (LPCTSTR)"C:\\temp", false);

Es existiert zum einen die Datei und der Ordner "temp" ebenso.
Was mach ich falsch?
 
Hi.

Der Backslash ist ein Spezialzeichen welches eine besondere Bedeutung hat. Um es in einem String zu verwenden mußt du es durch einen weiteren Backslash entschärfen. Für ein Backslash gefolgt von einem t wird ein Tab Zeichen eingesetzt.

Oder du verwendest einfach immer normale Schrägstriche - das funktioniert auch (und ist nicht so fehleranfällig).

Gruß
 
Salut,

ja ich weiß, weil ich soviel dran rumgespielt hab fehlt da an der Stelle ein "\".
Hab glaub ich jetzt schon alles ausprobiert...
sowohl "/" als auch "\\" oder "\"
Hab auch versucht nen DAteinamen mit an zu geben:

Code:
bool returnValue = CopyFile("(LPCTSTR)C:\\Programme\\test.txt", (LPCTSTR)"C:\\temp\\test.txt", false);

Auch das funktioniert nicht :(
Ich werd hier langsam gagga, sitzt hier getz seit stunden an dem prob :(
Aber das kann doch net so schwer sein.
Sonst noch ne Idee woran es liegen könnte?

Grüße
RuFF

EDIT:

Ich habe es jetzt hinbekommen ;)

Hier die korrekte lauffähige Version:

Code:
bool returnValue = CopyFile("C:\\Programme\\test.txt", "C:\\temp\\test.txt", false);

Mensch ich hab da getz stunden mit verbracht *heul*
Aber jetzt es ja^^

Danke für die Antwort ;)

Grüße RuFF
 
Zuletzt bearbeitet:
Außer das du jetzt das (LPCTSTR) mit in den String reingeschrieben hast...

Ruf mal nach der Funktion GetLastError auf und schau was da raus kommt, da weißt du dann warum es nicht funktioniert.

Gruß
 
Die Idee GetLastError() aufzurufen hatte ich auch schon, aber ich wusste nicht wie...
Hab oben editiert grad, also hat gefunzt^^
Danke für die schnelle Antwort.

Grüße RuFF

EDIT:
Habs grad gesehen dass ich echt den (LPCTSTR) mit in den String gepackt hatte :D
Tja wenn ich verzweifel schau ich irgendwie nciht mehr richtig hin^^
Aber gottseidank hat es gefunzt *g*

Grüße
 
RuFFnEcK hat gesagt.:
Würde es auch funktionieren, wenn ich regsvr32 als Parameter den kompletten Pfad der dll übergebe?
Natürlich würde das auch funktionieren. Du kannst ja mal regsvr32 im DOS-Fenster ohne Parameter aufrufen. Dann werden dir die Befehlssyntax und die verfügbaren Parameter angezeigt.

RuFFnEcK hat gesagt.:
Und da hab ich gleich nochmal eine Frage, wie kann ich ohn e verwalteten Code zu benutzen die Version einer dll ermitteln?
Da könntest du vielleicht mal einen Blick auf diesen Artikel werfen.

Gruß
MCoder
 
MCoder hat gesagt.:
Da könntest du vielleicht mal einen Blick auf diesen Artikel werfen.

Gruß
MCoder

Hab mal ganz Zufällig einen Blick auf den Artikel geworfen und ganz zufällig mir ganz schnell den Code kopiert und eingefügt, aber noch nicht richtig hingeschaut :D

Ist wohl genau das was ich gesucht hab^^
Vielen Dank, werde es bei gelegenheit mal direkt antesten.

Mit dem regsvr32 hab ich hinbekommen und wunderbar ;)
Auch hier vielen Dank an dich.

Werde mich erstmal mit dem verfassen wissenschaftlicher Arbeiten beschäftigen müssen :(
Das unschönste an solch einer Arbeit, aber da muss ich wohl auch durch ;)

Aber keine Frage ich komme wieder mit tausend Fragen *g*

Grüße RuFF
 

Neue Beiträge

Zurück