Laden...

Consolen Programm fehlerhaft bei Leerzeichen im Pfad -> Wie Nutzung ermöglichen?

Erstellt von Krumnix vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.619 Views
K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 3 Jahren
Consolen Programm fehlerhaft bei Leerzeichen im Pfad -> Wie Nutzung ermöglichen?

Hallo.

Ein externes Consolen Programm wurde von mir in mein Projekt integriert und mit eure Hilfe hier im Forum optimal verwendet.

Jetzt ist es leider so, dass das Consolen Programm keine Leerzeichen im Programmpfad erlaubt. Da bei der Installation des Programms der Benutzer dies irgendwohin installiert wo sich Leerzeichen im Pfad befinden können (z.B. Program Files) hab ich somit ein Problem.

Frage:
Kann ich dem Consolen-Programm irgendwie den Aufrufpfad "vorgaukeln", dass es keine Leerzeichen darin gibt?
Jemand eine andere Idee?

Danke

F
10.010 Beiträge seit 2004
vor 3 Jahren

Das ist bei allen Consolenprogrammen so, deswegen benutzt man ja auch "" um pfade.

16.807 Beiträge seit 2008
vor 3 Jahren

Das liegt nicht an der Konsolenanwendung selbst, sondern wie Betriebssysteme Kommandozeilen-Befehle verarbeiten.
How do I use spaces in the Command Prompt?

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 3 Jahren

Nein. Das Problem besteht auch, wenn das Programm direkt im CMD aufgerufen wird.
Pfad mit Leerzeichen funktioniert nicht.
Pfad ohne funktioniert.

Beispiel:

Win+R -> CMD -> Enter

CD Test Pfad
Consolenprogramm.exe
---> Funktioniert nicht

CD TestPfad
Consolenprogramm.exe
Funktioniert

16.807 Beiträge seit 2008
vor 3 Jahren

[Hinweis] Wie poste ich richtig? Punk 5, Fehler genau beschreiben.
Mit "Funktioniert nicht" kann niemand was anfangen.

2.078 Beiträge seit 2012
vor 3 Jahren

Das funktioniert, wichtig ist, dass man sich vorher unter C:/ befindet, daher die erste Zeile:

cd c:/
cd Program Files
cd "Program Files"

Das funktioniert immer, hauptsache der Pfad ist vollständig:

cd c:/Program Files
cd "c:/Program Files"

Eine Exe Starten funktioniert auch immer, außer sie hat Leerzeichen im Namen, dann braucht's eben Anführungszeichen.
Und natürlich muss der Pfad stimmen.

Aber ja - Fehlermeldungen verraten für gewöhnlich den Fehler.

D
152 Beiträge seit 2013
vor 3 Jahren

Für den Befehl gibt es den Parameter /D, mit dem auch das Laufwerk gewechselt wird.
https://ss64.com/nt/cd.html

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 3 Jahren


>
Punk 5, Fehler genau beschreiben.
Mit "Funktioniert nicht" kann niemand was anfangen.

Es kommt die Meldung vom Programm:
Fehler: Aufruf der internen Funktion zur Übertragung der Datei auf die Steuerung fehlgeschlagen. Grund: Der Aufrufpfad beinhaltet Leerzeichen, was nicht erlaubt ist.

T
2.219 Beiträge seit 2008
vor 3 Jahren

@Krumnix
Und wie sieht dein bisheriger Code aus?
Wir können dir nur helfen, wenn wir auch sehen, wie es aktuell umgesetzt ist.
Die Ratschläge bisher sind alle korrekt nur scheinst du diese nicht anzuwenden.
Du musst deine Pfade mit Leerzeichen immer mit Anführungszeichen einschließen und an deine Anwendung geben.
Durch die Anführungszeichen wird dein Pfad wie ein Argument an das Programm geliefert.

Nachtrag:
Und bitte auch den Code zeigen, der den Fehlerwirft.
Klingt nämlich mehr nach einem Problem in dem aufgerufenen Programm als bei der Übergabe des Pfades.
Hier scheint das Programm selbst den pfad zu prüfen und einen Fehler zu werfen, wenn dort ein Leerzeichen vorhanden ist.
In dem Fall müsstest du deine Datei verschieben damit dein Pfad keine Leerzeichen mehr hat und dann den neuen Pfad als Parameter übergeben.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 3 Jahren

Ok, vielleicht habe ich mich falsch ausgedrückt. Daher nochmal etwas detaillierter.

Ich befinde mich im Windows 10 CMD-Fenster. Mein Programm läuft nicht, VS läuft nicht. Der Cursor blinkt und wartet auf Eingabe.

Anzeige -> C:\

Ich schreibe: cd Test Pfad

Anzeige -> C:\Test Pfad\
Cursor blinkt hier.

Ich schreibe: consolenprogramm und drücke Enter

Es kommt die Meldung:
Fehler: Aufruf der internen Funktion zur Übertragung der Datei auf die Steuerung fehlgeschlagen. Grund: Der Aufrufpfad beinhaltet Leerzeichen, was nicht erlaubt ist.

Schreibe: cd.. + Enter
Schreibe: cd TestPfad + Enter (!!! Ordner hat KEINE Leerzeichen)
Schreibe: consolenprogramm + Enter
Programm läuft durch.

Das hat also nix mit meinem Code erstmal zu tun. Da ist was im Programm selbst, was dann nicht funktioniert.
Nun war die Frage, ob ich das unabhängig vom Pfad trotzdem starten kann, so dass das Programm meint, im Pfad ist kein Leerzeichen drin, obwohl es in so einen Pfad installiert wurde.
Kann man sowas über C# "vorgaukeln".

Den Rest verstehe ich ja 😃
Vielen Dank schonmal für eure Hilfe dazu.

16.807 Beiträge seit 2008
vor 3 Jahren

Nochmal: der Fehler ist offenbar Anwendungslogik, nicht das Framework aus .NET oder Windows.

Kann man sowas über C# "vorgaukeln".

Nochmal: mit .NET hat das nichts zutun.
.NET ist auch "nur ein Wrapper" um Windows Funktionen für sowas. Und natürlich kannste hier nix vorgaukeln.

3.170 Beiträge seit 2006
vor 3 Jahren

Hallo,

NTFS unterstützt auch Links auf Dateisystemebene (ähnlich Linux-Dateisystemen).
Damit müsste es funktionieren.
Schau mal unter NTFS links.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
2.219 Beiträge seit 2008
vor 3 Jahren

@Krumnix
Dann würde ich folgende Dinge prüfen.

1.Kannst du an dem Verhalten was ändern z.B: durch Anpassung an dem Programm?
2.Kannst du das Programm nicht einfach irgendwo anders installieren/ablegen?

Wenn das beides nicht geht, kannst du schauen ob der Vorschlag von MarsStein eine Lösung wäre.
Wenn auch dies nicht geht, ist eine Lösung dieses Problems mit einfachen Mitteln gar nicht machbar 😕

Einfachste Lösung wäre eben das Programm neu in einem anderen Order zu isntallieren, dann dürfte sich das Problem erledigen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 3 Jahren

Hmmm, schade.
Ich kopiere jetzt das Consolen-Programm in C:\Temp\ und rufe es von dort immer auf. Läuft, aber unschön.
Wenn mein Programm geschlossen wird, lösche ich das Consolen-Programm in Temp wieder.

Die Idee von MarsStein wäre jetzt zu aufwendig, würde ich mir aber mal bei Gelegenheit anschauen.

Danke für eure Tipps.

463 Beiträge seit 2009
vor 3 Jahren

Es kommt die Meldung:
Fehler: Aufruf der internen Funktion zur Übertragung der Datei auf die Steuerung fehlgeschlagen. Grund: Der Aufrufpfad beinhaltet Leerzeichen, was nicht erlaubt ist.

Suche doch einfach mal in deinem Program nach dieser Meldung - Ich vermute dein Program analysiert seinen Startpfad und wenn dort Leerzeichen enthalten sind, bringt er eben diese Fehlermeldung...

D
152 Beiträge seit 2013
vor 3 Jahren

Ich verstehe es so, die Meldung kommt vom externen Programm für das kein Zugriff auf den Quellcode vorhanden ist. Und dann hilft wohl nur sich an den Entwickler des Programms zuwenden.

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 3 Jahren

@david.m: Genau. Und das macht mir zu schaffen 😃 Aber habs mit der Sonderlösung jetzt im Griff. Unschön, aber läuft.