AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi ShellExecute (und die Function RunProcess von Luckie)
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute (und die Function RunProcess von Luckie)

Ein Thema von sahmann · begonnen am 22. Jan 2003 · letzter Beitrag vom 22. Jan 2003
 
sahmann

Registriert seit: 21. Jan 2003
15 Beiträge
 
#1

ShellExecute (und die Function RunProcess von Luckie)

  Alt 22. Jan 2003, 11:07
Hallo zusammen,

Ich zitiere hier Luckie aus einem Post vom Oktober
"Laut PSDK dient Shellexecute nicht dazu eine fremde Anwendung zu starten, sondern
Zitat:

Performs an operation on a specified file

.
Also um zum Beispiel eine Textdatei zu drucken ruft man Shellexecute mit dem Verb 'print' und der entsprechenden Datei auf. Das man damit auch fremde Anwendungen starten kann ist ein Abfallprodukt und ist eher als Mißbrauch zu sehen.

Wenn man es richtig machen will, sollte man CreateProcess benutzen.

Ich habe dazu mal eine kleine Funktion gebastelt. Der Funktion übergibt man den Pfad mit der Anwendung, ein Flag, welcher bestimmt, ob gewartet werden soll oder nicht bis die gestartetet Anwendung beendet ist und eine Variable vom Typ Cardinal, die dann die ProzessID enthält."

Ich habe mir den Source kopiert und bei mir eingebaut. Zum Scenario:
Ich habe ein Programm, welches als eine Art Installationsmenue dient. Das heisst, da sind vereinfacht ausgedrueckt 10 Buttons, und jeder Button ist mit einem RunProcess belegt, der ein externen Programm aufruft.

Problem dabei ist nun, das der erste Aufruf tadellos funktioniert, und die Applikation auch wartet (wait := true) bis das Setupprogramm
beendet und fertig ist.
Wenn man dann allerdings den naechsten Button klickt (oder wieder den Gleichen), dann startet das externe Setup nicht mehr. Im Taskmanager kann man dann nur noch die "setup.exe" und die "wowexec" abschiessen. Die Function RunProcess bekommt dann ein Signal das die Wartezeit abgelaufen ist, und man kann weiter arbeiten. Es lassen sich dann allerdings keine weiteren externen Programme starten.

Hat da noch jemand eine Idee? Hier ein Beispiel wie ich die Function RunProcess anspreche (man findet die Funktion wenn man hier im Forum nach "RunProcess" sucht.. ist von Luckie erstellt).


Code:
procedure TForm1.JvBitBtn1Click(Sender: TObject);
var
  wahl: integer;
  ProcID: PCardinal;

begin
  if not ListBox1.ItemIndex < 0 then begin
    wahl:= ListBox1.ItemIndex;
    if wahl = 11 then begin
MessageDlg('Das externe Programm wird jetzt gestartet',                mtInformation, [mbOk], 0);
  RunProcess('c:\daten\extern\setup.exe', SW_SHOWNORMAL, TRUE, ProcID);
  end;
end;
(sorry.. ich glaube die Formatierung spielt nicht ganz mit :/)

Für jede Hilfe sehr dankbar.

Gruss,
Sascha
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz