Forum: PC-Programmierung Windows: Verknüpfungen "ausführen" oder mit Windows Installer starten?


von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mal probiert, was passiert, wenn Du statt system mit ShellExecute 
arbeitest?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ah, das klingt recht vielversprechend, so etwas habe ich gesucht. Am 
Montag hab ich Gelegenheit, es auszuprobieren. Dankeschön :)

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.