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
Das ist bei allen Consolenprogrammen so, deswegen benutzt man ja auch "" um pfade.
Das liegt nicht an der Konsolenanwendung selbst, sondern wie Betriebssysteme Kommandozeilen-Befehle verarbeiten.
How do I use spaces in the Command Prompt?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
[Hinweis] Wie poste ich richtig? Punk 5, Fehler genau beschreiben.
Mit "Funktioniert nicht" kann niemand was anfangen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Für den Befehl gibt es den Parameter /D, mit dem auch das Laufwerk gewechselt wird.
https://ss64.com/nt/cd.html
> 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.
@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.
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.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
@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.
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.
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...
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.
@david.m: Genau. Und das macht mir zu schaffen 😃 Aber habs mit der Sonderlösung jetzt im Griff. Unschön, aber läuft.