Ausführen eines CMD Befehls funktioniert nicht richtig.

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Ausführen eines CMD Befehls funktioniert nicht richtig.

    Hallo Leute,

    ich habe anscheinend ein Thema mit der Windows CMD und deren Nutzung durch mein vb.net Programm.

    Hier geht's zur Vorgeschichte:
    Spoiler anzeigen
    ​Ich habe ein Programm geschrieben, dass ähnlich einer Fernbedienung (Hotlinkliste) einen Bestimmten Suchbegriff über unterschiedliche Webseiten, Datenbanken und auch lokalen Dokumenten suchen soll. Dazu gibt es bereits einige Beiträge von mir. Das Tool funktioniert eigentlich sehr gut, allerdings macht mir die Funktion der Dateiinhaltssuche in lokalen Dokumenten immer wieder ärger. Ich suche hier in einem Ordner mit hunderten Katalogen nach einem Schlagwort. Der Windows Explorer bietet dazu bereits eine perfekte Lösung in Form der Windows Suche und dem Indizierungsdienst. Ein nachbauen dieser Funktion ist daher nicht notwendig. Microsoft bietet zu dieser Funktion allerdings auch eine API an. Leider scheitere ich hier kläglich an meinen Kenntnissen. Zudem wäre dann hier noch immer das Thema der Ausgabe. Das müsste dann auch wieder nachgebaut werden. ||


    Ich möchte gerne folgenden CMD Befehl per vb.net Code ausführen. Diese eigentlich einfache Funktion bringt mich allerdings zur Verzweiflung:

    Windows CMD Shell. Nach dem letzten größeren Windows 10 Update hatte ich hier das selbe Ergebnis wie bei dem VB.net Code. Inzwischen funktioniert der CMD Befehl wieder, warum auch immer. (Möglicherweise gab es ein bugfix)

    Quellcode

    1. ​explorer "search-ms:crumb=location:C:\Suchordner&query=Suchbegriff"


    VBScript Code, die ich über eine HTA Datei aufrufe

    Visual Basic-Quellcode

    1. Set WshShell = CreateObject("WScript.Shell")
    2. WshShell.Run "%windir%\explorer.exe " & Chr(34) & "search-ms:crumb=location:" & MySearchFolder & "&query=" & Suchbegriff & Chr(34)​


    VB.net Code, der nicht funktioniert wie er soll

    VB.NET-Quellcode

    1. ​Imports IWshRuntimeLibrary
    2. Public WshShell As New IWshShell_Class
    3. WshShell.Run(Chr(34) & "C:\Windows\explorer.exe " & Chr(34) & "search-ms:crumb=location:" & MySearchFolder & "&query=" & Suchbegriff & Chr(34),, True)



    CMD und VBS bringt mir als Ergebnis ein Explorer Fenster, dass in dem Verzeichnis "C:\Temp" nach einem Eintrag "Suchbegriff" gesucht hat.

    Der Aufruf über den vb.net Code zeigt mir folgendes Fenster:


    Dieses Fenster erscheint in Windows 10 seit dem letzten Systemupdate und bedeutet, dass der MS Store, warum auch immer der sich da reinhängt, zu dem Kommando keine passende App gefunden hat.

    Ich habe also Irgendein Problem bei der Übergabe des Kommandos an die WshShell. Wo liegt mein Fehler???

    Viele Grüße,
    Andreas
    Wer nichts weiß ist nicht Dumm sondern unwissend!
    VB.NET Neueinsteuger... aber natürlich immer in "Option Explicit" - sonst lernt man nit!
    @Darkscale In welchen Verzeichnis startest Du das Programm?
    In welchem Verzeichnis soll das Programm laufen?
    Und:

    VB.NET-Quellcode

    1. MessageBox.Show("""")
    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!
    Hallo RodFromGermany,

    Ich verstehe die Frage nicht ganz. Die Programmpfade sind doch im Code enthalten. Der Explorer wird in seinem Verzeichnis "C:\Windows" gestartet. Im Original Code hole ich mir das Verzeichnis "C:\Windows" natürlich über die Environments, falls Windows doch mal nicht in "C:\Windows" liegen sollte.

    Den Standort des Programms hole ich mir über "Application.StartupPath", allerdings ist dieser für den Befehl meines Erachtens nicht relevant.

    VB.NET-Quellcode

    1. MessageBox.Show("""")​

    Was ist damit gemeint? Das Ergebniss soll ja nicht als Liste ausgegeben werden, sondern ein Explorer Fenster.

    Grüße
    Wer nichts weiß ist nicht Dumm sondern unwissend!
    VB.NET Neueinsteuger... aber natürlich immer in "Option Explicit" - sonst lernt man nit!
    Du kannst ein Programm von jedem beliebigen Pfad aus aufrufen.
    Wenn das Programm dann seine Daten in seinem Verzeichnis sucht, greift es daneben, weil sie nicht da sind, von wo das Programm gestartet wurde, sondern da, wo es liegt.
    Sieh Dir mal dies an: ProcessStartInfo.WorkingDirectory

    Darkscale schrieb:

    Was ist damit gemeint?
    Führe diesen Befehl aus und verstehe, was da angezeigt wird.
    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!
    Erstmal vielen Dank für den, wenn auch kryptischen Hinweis, dass ich da ein Chr(34) bzw. " zu viel in meiner Kommandozeile hatte.

    Ich habe es inzwischen hinbekommen. Der Hinweis zur Nutzung des Process.Start() hat es dann doch gebracht. Die lieben alten Gewohnheiten zu vb6 und der Shell. *seuftz* Aber so ist das nunmal, wenn man es nur als Hobby betreibt. Viel error und ein bisschen trail. Allerdings bin ich bei dem Thema WorkingPath noch nicht ganz durchgestiegen. Muss mich da noch etwas mit beschäftigen. Aber so habe ich erstmal eine Lauffähige Version!

    Ich habe den Code nun wie Folgt geändert:

    VB.NET-Quellcode

    1. Dim Runme As New System.Diagnostics.Process()
    2. Runme.Start("C:\Windows\explorer.exe", Chr(34) & "search-ms:crumb=location:" & MySearchFolder & "&query=" & Suchbegriff & Chr(34))


    Dabei ist noch wichtig, dass die Parameter hier durch ein , vom ausführbaren Programm getrennt werden. Da hatte er zunächst noch gemeckert.

    Wenn ich das mit dem Process.Start richtig verstanden habe, und meine anderen WshShell kommandos durch den Process.Start ersetzen und dann die "Imports IWshRuntimeLibrary" über Board werfen. Korrekt?
    Wer nichts weiß ist nicht Dumm sondern unwissend!
    VB.NET Neueinsteuger... aber natürlich immer in "Option Explicit" - sonst lernt man nit!

    Darkscale schrieb:

    Korrekt?
    Jou.
    Und:

    VB.NET-Quellcode

    1. Runme.Start("C:\Windows\explorer.exe", String.Format($"""search-ms:crumb=location:{MySearchFolder}&query={Suchbegriff}"""))

    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!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()