WPF VB Chr(34) liefert doppeltes Anführungszeichen (" " statt ")

  • WPF

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    WPF VB Chr(34) liefert doppeltes Anführungszeichen (" " statt ")

    Hallo Zusammen,

    aktuell schreibe ich eine Anwendung die unter anderem den Login mit Ultra VNC erleichtert.
    Mit dem CMD Befehl

    Quellcode

    1. start C:\"Program Files"\"uvnc bvba"\UltraVNC\vncviewer.exe -password passwort rechnername
    klappt das super.

    Allerdings habe ich das eigenartige Problem dass wenn ich den String für System.Diagnostics.Process.Start mit Chr(34) zusammensetze, das jedes Chr(34) zwei Anführungszeichen liefert. Das funktioniert dann natürlich mit CMD nicht mehr.

    Als Klartext heißt dass dann aus

    Quellcode

    1. System.Diagnostics.Process.Start("cmd.exe", "start C:\" & Chr(34) & "Program Files" & Chr(34) & "\" & "uvnc bvba" & "\vncviewer.exe ..."

    wird

    Quellcode

    1. "start C:\[b]""[/b]Program Files[b]""[/b]\[b]""[/b]uvnc bvba[b]""[/b]\vncviewer.exe ..."


    Hat jemand eine Idee woher das kommt? Mir gehen leider die Ideen aus.
    Ich verwende Visual Studio 2015 Professional.
    Der Debugger zeigt Anführungszeichen in einem String als doppelte Anführungszeichen an.
    Wenn der String in die Datei geschrieben wird, kommt er schon so wie du willst.

    Du könntest die Zuweisung auch so machen:
    Dim CmdLine = "start C:\""Program Files""\""uvnc bvba""\vncviewer.exe ..."

    Ich hätte es übrigens so gemacht:
    Dim CmdLine = "start ""C:\Program Files\uvnc bvba\vncviewer.exe"" ..."
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für deine Antwort. Das habe ich auch schon versucht aber das hat bei mir nicht geklappt. Habe hier auch schon etliche Varianten versucht. Den Usernamen brauche ich auch, das fehlt oben. Ich wollte mich Schritt für Schritt rantasten.
    Der letzte Versuch sah so aus:

    Quellcode

    1. StartInfo = New ProcessStartInfo
    2. StartInfo.FileName = PfadUltraVNC
    3. StartInfo.UserName = Username
    4. StartInfo.Password = securePwd
    5. StartInfo.Arguments = Rechnername
    6. StartInfo.UseShellExecute = False
    7. Process.Start(StartInfo)


    In diesem Fall kommt "Das Stub erhielt falsche Daten". Über cmd schien mir das recht einfach bis auf das eigenartige Problem mit Chr(34).
    Der Benutzernamen und das Passwort sind Parameter für UltraVnc, heißt die müssen mit zu den Arguments.
    ProcessStartInfo.UserName und .Password sind dafür da um den Prozess unter einem anderen User auf deinem Rechner auszuführen.

    petaod schrieb:

    Der Debugger zeigt Anführungszeichen in einem String als doppelte Anführungszeichen an.
    Wenn der String in die Datei geschrieben wird, kommt er schon so wie du willst.

    Du könntest die Zuweisung auch so machen:
    Dim CmdLine = "start C:\""Program Files""\""uvnc bvba""\vncviewer.exe ..."

    Ich hätte es übrigens so gemacht:
    Dim CmdLine = "start ""C:\Program Files\uvnc bvba\vncviewer.exe"" ..."


    Oh man und ich dachte es funktioniert nicht wegen den doppelten Anführungszeichen :O
    ich habe dann nämlich noch das Problem das der Befehl in cmd funktioniert, aber nicht mit

    Quellcode

    1. System.Diagnostics.Process.Start("cmd.exe", "start C:\""Program Files""\""uvnc bvba""\vncviewer.exe ..."

    Ich habe mir vor dieser Zeile eine Msgbox gemacht welche den Inhalt genauso ausgibt wie in cmd.
    Dennoch bekomme ich bei Ausführung nur ein cmd fenster mit

    Quellcode

    1. C:\Users\WinUserName\Documents\Visual Studio 2015\Projects\Project2\Project2\bin\Debug>
    Dann solltest du der cmd.exe den Parameter /c mitgeben.
    Oder eben, wie @slice vorschlug, mit Direktaufruf

    VB.NET-Quellcode

    1. StartInfo = New ProcessStartInfo
    2. StartInfo.FileName = "C:\Program Files\uvnc bvba\vncviewer.exe"
    3. StartInfo.Arguments = "..."
    4. StartInfo.UseShellExecute = False
    5. Process.Start(StartInfo)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Vielen Dank für eure Hilfe! Mit cmd klappt das jetzt schon mal :)

    Aber wie gebe ich bei StartInfo.Arguments mehrere Argumente an? Ich brauche ja Rechnername, User und Password.
    Allerdings weiß ich nicht wie diese getrennt werden sollen.

    Wenn das klappt bin ich wunschlos glücklich :)

    PaprikaJunge schrieb:

    mehrere Argumente
    Wie will denn das Programm die haben?
    Alle in einen String getrennt durch Leerzeichen?
    Alle in einen String mit einem Anstrich / Slash / Backslash?
    Starte das Programm in einer Console mit "/?" oder "/Help" oder "Help" als Parameter, da wird Dir geholfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    *unnötiges Vollzitat entfernt*

    Super, danke an alle. Jetzt hab ich es auch mal geschafft. Zur Vollständigkeit sieht das ganze sieht jetzt so aus:

    Quellcode

    1. StartInfo = New ProcessStartInfo
    2. StartInfo.FileName = "C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe"
    3. StartInfo.Arguments = "-password passwort -user benutzer rechnername"
    4. StartInfo.UseShellExecute = False
    5. Process.Start(StartInfo)


    oder alternativ
    System.Diagnostics.Process.Start("cmd.exe", "/c start C:\" & Chr(34) & "Program Files" & Chr(34) & "\" & Chr(34) & "uvnc bvba" & Chr(34) & "\UltraVNC\vncviewer.exe -password passwort -user benutzer rechnername")

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @PaprikaJunge Bitte unterlass das vollständige Zitieren von Posts über Deinen, das ist hier unerwünscht.
    ====
    Du kannst ein "Gänsefüßchen" in einem String auch so erzeugen:

    VB.NET-Quellcode

    1. MessageBox.Show("/c start ""C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe"" ""-password passwort"" ""-user benutzer rechnername""")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!