[vb.net] Process.Start()-Problem mit Leerzeichen

Andreas Dunstheimer

Erfahrenes Mitglied
So, ich hoffe nun, daß ich hier im richtigen Forum bin ;)

Vorab: Ich weiß, daß ein ähnliches Thema bereits existiert, aber es bringt mich nicht so richtig weiter.

Mein Problem: aus einer anderen Anwendung werden Shell-Befehlszeilen in eine Datenbank geschrieben, die ich mit VB.NET auslese, und ausführen will. In der DB steht dann also z.B. "C:\Programme\Network Tools\blabla.exe /1 /2 /3"

Das Problem dabei sind die Leerzeichen im Pfad. Ich bekomme immer die Meldung, daß er die Datei nicht findet.

Ich hab jetzt den Quellcode nicht hier, aber der sieht in etwa so aus:

Code:
...
befehl = rs("Befehlszeile")   ' aus der Datenbank
...
Process.Start(befehl)
...

Wie bekomme ich die Leerzeichen im Pfad raus?
 
Wie wäre es damit , dass du in den String (in der Datenbank) vor und hinter dem Pfad " setzt ! Dies könntest du mit Chr(34) , realisieren , könnte dann so aussehen :

Code:
befehl  = rs ( Chr(34)+"pfad"+Chr(34) )

Ich hoffe ich konnte dir damit weiterhelfen ;)
 
Das hatte ich schon probiert (Wie gesagt, existierte die Frage schonmal hier im Forum, und da war das auch ein Lösungsansatz) - Leider bringt das garnix :(
 
Hi

Die Argumente dürfen nicht im Pfad zur Exe enthalten sein, daher auch der extra Parameter der Methode Prozess.Start.
Du musst also den String auseinander basteln in Pfad und Argumente und diese dann übergeben.
 
ok, ich habs umgebaut, und es funktioniert soweit:

Code:
Dim p As New Process
...

Try
    p.StartInfo.UseShellExecute = False
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.FileName = Befehl
    p.StartInfo.WorkingDirectory = Pfad
    p.StartInfo.Arguments = Parameter
    p.Start()
    p.WaitForExit()
    output = p.StandardOutput.ReadToEnd()
Catch ex As Exception
    LogEintrag = "Befehl wurde nicht ausgeführt! Fehler: " & ex.Message
End Try

Allerdings habe ich nun noch ein Problem: Das Programm soll als Dienst auf verschiedenen Rechnern laufen, und in regelmässigen Abständen in der Datenbank nachsehen, ob für den jeweiligen Rechner ein neuer Befehl vorliegt.

Das läuft soweit auch alles ... allerdings nicht auf jedem Rechner.
Ich bekomme immer die Fehlermeldung: "Das System kann die angegebene Datei nicht finden", was darauf hinweist, daß daß das Programm, welches ausgeführt werden soll nicht existiert. Wenn ich allerdings den Befehl (natürlich mit Pfad und Parametern), der in der Datenbank steht direkt in ein Shell-Fenster kopiere, wird der Befehl ausgeführt.

Wie gesagt: auf mehreren Rechnern läuft das Programm, nur auf einem läuft es nicht. Warum?

Ich habe bei zwei recht identischen Rechnern (wo das Programm auf dem einen läuft) natürlich schon einiges überprüft:
- Es läuft das gleiche Betriebssystem (Windows Server 2003)
- Das .NET-Framework (alle Versionen) ist ordnungsgemäss installiert
- Der Dienst wird unter dem gleichen Benutzerkonto ausgeführt
- Die auszuführende Datei ist vorhanden (sogar die Pfade dahin sind identisch)
- Die auszuführende Datei hat die gleichen Benutzer-Zugriffsrechte

Das Programm scheint ansonsten fehlerfrei zu laufen (DB-Zugriff usw.) - das einzige, was nicht funktioniert ist die Process.Start()-Anweisung - da kommt es zur Exception.

Entweder die Fehlermeldung ist nicht korrekt, oder ich übersehe irgendwas ...
An was könnte es noch liegen? Bin ein wenig ratlos im Moment.
 
Hi

Kann es sein, dass du auf dem entsprechenden Rechner keine Rechte hast.
Du kannst nur auf einem Rechner Anwendungen ausführen, wenn du dazu berechtigt bist.
 
Wie schon gesagt: der Dienst läuft unter dem gleichen Benutzerkonto wie auf dem Rechner, auf dem es funktioniert. Ich habe alle Berechtigungen überprüft, und es ist alles gleich !!

Ich habe sogar verschiedene Benutzerkonten ausprobiert ... inkl. dem Administrator-Konto !! Von der Befehlszeile aus kann ich das entsprechende Programm ja auch starten ... nur aus dem Dienst heraus nicht ... :confused:
 

Neue Beiträge

Zurück