Liebe Leser, ich schreibe gerade unter WinXP mit Ruby (wovon aus man aber auch Zugriff auf das Win32-API oder beliebige DLLs hat) ein Programm, welches unter anderem ein 2. Programm starten soll, und, nachdem dieses 2. Programm beendet wurde, eine Aktion durchführen soll. Dieses 2. Programm wird normalerweise von Hand über einen Startmenü-Eintrag gestartet, aber das soll jetzt automatisch gehen. Leider besteht dieses Programm aus vielen einzelnen .exe-Dateien, und es ist nicht recht klar, welche man wie starten muss - der Task-Manager zeigt zwar den Namen der normalerweise laufenden .exe an, aber die kann man nicht direkt starten, denn offenbar muss man irgendwelche Kommandozeilenargumente [/? oder /help bringt natürlich nichts] übergeben oder eine der anderen .exe'n als Launcher verwenden oder einen Voodoo-Zauber durchführen, damit das Programm seine Lizenz-Daten findet. Über den Startmenü-Eintrag sollte sich das Problem ja lösen lassen, doch dummerweise ist im Eigenschaften-Fenster der Verknüpfung das "Ziel"-Eingabefeld ausgegraut und es steht lediglich der Name des Programms drin, kein Pfad zu einer .exe-Datei. Wenn man die Verknüpfung (also die .lnk-Datei) selber mit einem Editor öffnet, steht da auch kein Pfad zu einer .exe-Datei drin. Allerdings steht da was von Windows-Installer und eine GUID - vielleicht startet der Windows Installer ja das Programm anhand dieser GUID. Auf microsoft.com habe ich aber nichts darüber gefunden, wie man den Windows Installer anweist, ein Programm zu starten (weder Kommandozeile noch Automation-API). Eine andere Möglichkeit wäre es, wenn man den explorer anweisen könnte, die .lnk-Datei zu öffnen - wenn man einfach "explorer.exe C:\Pfad\zur\lnk\Datei" ausführt erscheint nur ein Fenster, wo man angeben soll, ob man die Datei speichern oder Ausführen möchte (Ausführen geht zwar, aber das Fenster stört doch...) - nur wie? Wenn man den Pfad zur .lnk-Datei in ein cmd.exe-Fenster eintippt, wird das Programm gestartet, aber wenn man von einem eigenen Programm heraus mit system() die .lnk-Datei "ausführt", passiert gar nichts. Weiß jemand eine Möglichkeit, wie man den explorer dazu bringt, eine Verknüpfung zu öffnen, oder den Windows Installer dazu, ein bestimmtes Programm zu starten? Vielen Dank im Voraus.
Mal probiert, was passiert, wenn Du statt system mit ShellExecute arbeitest?
Ah, das klingt recht vielversprechend, so etwas habe ich gesucht. Am Montag hab ich Gelegenheit, es auszuprobieren. Dankeschön :)
Das Starten des Programms über die Verknüpfung funktioniert mit ShellExecuteEx zwar prinzipiell, aber auch wenn ich SEE_MASK_NOCLOSEPROCES setze ist hProcess immer 0, sodass ich nicht mit den Wait-Funktionen darauf warten kann, dass das Programm beendet wird, vermutlich weil da der Windows-Installer die Finger im Spiel hat und das asynchron gestartet wird. Weiß zufällig jemand, wie man das trotzdem synchron kriegt? Wenn nicht werden wir wohl mal den Support nerven...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.