[gelöst] Programmaufruf via ShellExecute



  • Hallo miteinander.

    Ich möchte ein(e) Programm(Funktion) aus einem C-Programm heraus, mittels ShellExecute starten. Folgender Aufruf startet eine Datenbankentwicklungsumgebung (allerdings geht das nur mit einem Umweg über die CmdShell).
    Der Aufruf:

    ShellExecute(0,
    L"open", L"C:\\Windows\\System32\\cmd.exe",
    L"/c \"C:\\Pfad\\Microsoft Dynamics\\NAV\\V7.00\\RoleTailored Client\\finsql.exe\" servername=192.168.2.11\\NAVISION,database=Testdatenbank", 0,
    SW_HIDE));
    

    funktioniert - die Entwicklungsumgebung wird mit der angegebenen DB gestartet. Jetzt kann ich über eine Aufrufmodifikation in der Shell, wahlweise auch nur DB-Objekte exportieren. Dazu dieser Aufruf

    ShellExecute(0,
    L"open", L"C:\\Windows\\System32\\cmd.exe",
    L"/c \"C:\\Pfad\\Microsoft Dynamics\\NAV\\V7.00\\RoleTailored Client\\finsql.exe\" command=exportobjects,file=u:\\V700-T.txt,servername=192.168.2.1\\navision,database=Testdatenbank,logfile=u:\\meinExportTestLog.txt,filter=\"ID=5146087;Type=Table\"",
    0,
    SW_HIDE);
    

    Danach sollte das exportierte Objekt oder eine Logdatei im angegebenen Ordner liegen. Allerdings passiert nix. Lasse ich mir den String einfach auf die Ausgabe schreiben, kopiere diesen, füge ihn in die CmdShell ein und setze in als Befehl ab, klappt es. Demnach kann es eigentlich nicht am String liegen. Gibt es beim zweiten Aufruf vielleicht etwas, dass zu einem Fehler führt der nicht ausgegeben wird?

    Danke fürs Reinschauen

    Kai 🙂


  • Mod

    Und warum benutzt Du überhaupt ein Command Window?

    Du kannst finsql.exe doch direkt ausführen.
    Zudem solltest Du ShellExecuteEx nehmen. Damit kannst Du wenigstens warten, bis der Prozess vorbei ist.



  • Ich muss ständig Objekte verschiedener NAV-Versionen miteinander vergleichen. Daher ist mir das per Knopfdruck viel lieber.
    Der Aufruf über die CmdShell ist leider unvermeidbar. Rufe ich finsql.exe direkt auf, kriege ich einen Fehler, der mir sagt der String sei zu lang.

    Der Vorschlag mit der Benutzung von ShellExecuteEx ist aber schon mal sehr gut. Wir haben gestern noch herausgefunden, dass es wohl an der Filterangabe liegt:

    ...,filter="ID=5147010..5147020|Type=Table"
    

    Die Anführungsstriche müssen ja auf jeden Fall sein. Gibt es da vielleicht ein Interpretationsproblem mit diesen Zeichen zwischen den Anwendungen? Lässt man den Filter weg, klappt das ganze - allerdings will ich nicht ständig alle Objekte exportieren.


  • Mod

    Dann machst Du was falsch. CMD.EXE dazwischen zu schalten dürfte nicht nötig sein.
    Ansonsten solltest Du auch das beachten:
    https://support.microsoft.com/de-de/kb/830473



  • Vielen, vielen Dank
    für den Tipp, es nicht über den Umweg mit der CmdShell zu versuchen. Ich hatte das ganz zu Anfang auf diese Weise ausprobiert und dabei eine GUI-Error-Message einkassiert. Weiß nicht was ich da falsch gemacht habe. Wollte eigentlich nur die Fehlermeldung provozieren um diese mal posten zu können und plötzlich hat es geklappt.

    Vielen Dank nochmals an dieser Stelle 🙂 🙂 🙂

    Gruß
    Kai


Log in to reply