[Gelöst] - regsvr32 meldet ungültiges Zeichen in Dateiname

3. November 2006 13:38

Ich für aus eine Codeunit folgenden Befehl aus:
Code:
lintReturn := SHELL('regsvr32.exe /s ' +'"'+ ltxtFile +'"');


Ich erhalte immer die Fehlermeldung, dass der Dateiname ein ungültiges Zeichen enthält. Ich kann jedoch nichts entdecken. Der komplette String lautet aufgelöst:

regsvr32.exe /s C:\Programme\NAVTools\Clipboard.dll

Sieht aus wie es sein sollte, und trotzdem wird die Registrierung nicht durchgeführt. Die manuelle Registration über Start -> Ausführen funktioniert tadellos. Hat jemand eine Idee dazu?
Zuletzt geändert von rotsch am 3. November 2006 16:29, insgesamt 1-mal geändert.

3. November 2006 15:29

Hallo rotsch,

ich würde auf die Anführungszeichen tippen.
Mir währe nicht plausibel, warum die im String mit sein müssten!


Gruß Mikka

3. November 2006 15:40

Hallo Mikka

Ich habe schon beide Varianten versucht. Ich denke aber, mit Anführungszeichen ist schon richtig für den Fall, dass das Verzeichnis aus 'geteilten' Begriffen (mit Leerschlag) besteht, z.B.

C:\Programme\Gemeinsame Dateien\

Auf jeden Fall muss ich Anführungszeichen verwenden, wenn ich manuell registriere.

3. November 2006 15:46

Die Anführungszeichen sind OK.
Bis 3.7 hat Deine Version funktioniert.
Das Problem ist der geänderte Shell-Befehl ab 4.x.

Du musst die Parameter als sep. String übergeben.
So:

Code:
iReturn := SHELL('regsvr32.exe', '/s"' + ltxtFile + '"');


Das /s (für Silent) und der Filename des ActiveX können nicht mit dem regsvr32 als 1 String übergeben werden.

Gruss
Martin

3. November 2006 15:50

Das stimmt,
so ist mit das bei getrennten Pfadangaben auch bekannt.
Hast du den String dir mit einer MESSAGE ausgeben lassen, wie dieser aussieht?
Evtl. kommst du dann dem Problem auf die schliche.
Wenn das auch nicht hilft, schreib um den String zu Prüfen in eine Textdatei.
Wenn dann immer noch keine Auffalligkeiten sichtbar sin, dann weiß ich auch nicht mehr weiter. :roll:
Gruß Mikka

3. November 2006 15:53

Hi Rotsch,

ich hatte auch mal dieses Problem.
Habe es umgangen, indem ich den Programmaufruf einer Text-Variable zugewiesen habe. Bei mir war aber ein Zugriffsberechtigung-Fehler vom Betriebssystem die Meldung.

Code:
txtVar := 'regsvr32.exe';
lintReturn := SHELL(txtVar PLUS ' /s' PLUS '"' PLUS ltxtFile PLUS '"');


Vielleicht die richtige Idee ?

Wolfgang


P.S.: ...wie hast Du das PLUS Zeichen in den Code reingebracht ? :roll:

3. November 2006 15:54

Den String in einer Message (LowLevel-Debugger) kannst Du Dir vermutlich sparen.
Mit dem genau gleichen Problem habe ich vor ein paar Monaten auch gekämpft. Trenne die Parameter vom Aufruf regsvr32 und es geht.
Hier haben sich die Entwickler von Microsoft wohl selber übertroffen.
Versuch mal einen solchen Shell-Aufruf in Zusammenhang mit dem NAS auszuführen. Da kommts noch besser.

Gruss

3. November 2006 16:01

Mit einer MESSAGE habe ich das schon geprüft, das hat alles i.O. ausgesehen.

Jetzt habe ich den String in eine Datei geschrieben. Der kam dort sauber an (wie gewünscht). Ich kann den String von dort mit Copy/Paste in die manuelle Registrierung übertragen und die dll dann registrieren. Klappt auch wunderbar.

Einfach auf Navision heraus will er nicht. Ich habe den Eindruck, dass die Anführungszeichen verschluckt werden. :-? :-?

3. November 2006 16:05

@martinst
Ja, das mit der MESSAGE kann ROTSCH sich sparen.
Ich habe dein Posting nicht gesehen, da ich selbst am schreiben war.

Mir war bis eben gerade aber auch nicht klar, das der SHELL Aufruf sich in der 4.0 geändert hat.
Gruß Mikka

3. November 2006 16:08

@Rotsch

Sieh meine 1. Antwort auf Deine Frage.

Gruss

3. November 2006 16:27

Also, erstmal Danke an alle, die hier Tipps gegeben haben. Ich habe eine meiner Antworten geschrieben, ohne alle anderen Antworten gesehen zu haben (warum auch immer). Daher war meine letzte Anwort eher etwas aus dem Zusammenhang geraten.

Der Tipp von martinst hat letztendlich geholfen. Als ich das gelesen haben, wurde es mir natürlich auf einen Schlag wieder klar. Ich hatte das Beispiel aus mibuso für die Registrierung von dll's zur Laufzeit verwendet. Dieses Beispiel ist eher schon alt und hatte daher die alte SHELL-Syntax im Code. Hätte ich mal kurz in die Hilfe zum SHELL-Befehl gelinst, wäre ich vermutlich vorher draufgekommen (wer lesen kann ist ganz klar im Vorteil :-D )

Auf jeden Fall funktioniert es jetzt. Einzig die regsvr32.exe wollte er plötzlich nicht mehr finden, warum auch immer. Ich habe das mit dem ENVIRON-Befehl gelöst, und das Verzeichnis davorgestellt.

Also herzlichen Dank an alle und ein schönes Weekend.

3. November 2006 16:29

voyager hat geschrieben:P.S.: ...wie hast Du das PLUS Zeichen in den Code reingebracht ? :roll:


So wie ich das sehe, sind die Plus-Zeichen in der Vorschau nicht sichtbar. Nach dem Absenden des Beitrages sieht man sie aber. Wahrscheinlich ein Fehler der Board-Software. Auf jeden Fall habe ich nichts spezielles gemacht, sondern die Zeichen einfach eingetippt.

3. November 2006 16:45

Auf jeden Fall funktioniert es jetzt. Einzig die regsvr32.exe wollte er plötzlich nicht mehr finden, warum auch immer. Ich habe das mit dem ENVIRON-Befehl gelöst, und das Verzeichnis davorgestellt.


Ist irgendwie auch erst seit 4.x so.
Der scheint nur noch ganze Pfade zu akzeptieren.

Gruss