Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programm nur einmal starten (https://www.delphipraxis.net/146982-programm-nur-einmal-starten.html)

Gargamel 30. Jan 2010 12:18


Programm nur einmal starten
 
Nächstes Problem. Ein Programm darf nur einmal gestartet werden. Dazu habe ich diese Funktion:

Delphi-Quellcode:
function AppAlreadyUsed(path:string):boolean;
var mHandle: THandle;
    ergebnis:boolean;
Begin
  ergebnis:=false;
  mHandle := CreateMutex(nil,True,PAnsiChar('Global\'+path));
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    ergebnis:=true;
  end;

  if mHandle <> 0 then
    CloseHandle(mHandle);

  result:=ergebnis;
End;
Aufgerufen wird die Funktion z.B. so:

Delphi-Quellcode:
if AppAlreadyUsed('C:\Windows\notepad.exe') = true
  then
     Label3.Caption:='Notepad bereits ausgeführt'
  else
     Label3.Caption:='Notepad läuft momentan nicht';
Was mache ich da wieder falsch?

Luckie 30. Jan 2010 12:24

Re: Programm nur einmal starten
 
Die Funktion verhindert einen Mehrfachstart der eigenen Anwendung und nicht von anderen Anwendungen. Der Pfad wird nur übergeben, damit der Mutex eindeutig ist.

Gargamel 30. Jan 2010 12:28

Re: Programm nur einmal starten
 
Achso. OK, dann habe ich da etwas falsch verstanden.
Ich möchte über einen Launcher ein anderes Programm starten. Aber eben nur dann, wenn dieses nicht bereits gestartet wurde.

Bei der Gelegenheit will ich gleich noch eine Möglichkeit haben, ein anderes Programm zu beenden.

Matze 30. Jan 2010 12:30

Re: Programm nur einmal starten
 
Ermitteln, ob eine Exe-Datei läuft
Das prüft allerdings nur den Dateinamen, nicht den Pfad.

Wie man eine Anwendung beendet, steht 100% hier irgendwo in der DP. ;)

rollstuhlfahrer 30. Jan 2010 12:31

Re: Programm nur einmal starten
 
Du müsstest mit Delphi-Referenz durchsuchenPricess32First/Delphi-Referenz durchsuchenProcess32Next die Prozessliste durchgehen und dann prüfen, ob ein Prozess da schon dabei ist. Dabei kann der Prozess aber dennoch doppelt auftreten.

Bernhard

[roter Kasten: war zu langsam]

Gargamel 30. Jan 2010 13:05

Re: Programm nur einmal starten
 
OK, scheint zu funktionieren. Danke danke danke.
Das jetzt kein Pfad dabei ist, kann ich verschmerzen, da der Launcher nur ein ganz bestimmtes Programm starten soll. Nämlich mein eigenes Programm. :wink:

In dem Launcher soll man diverse Einstellungen vornehmen können, die dann als Parameter an das andere Programm übergeben werden.

manfred_h 30. Jan 2010 16:44

Re: Programm nur einmal starten
 
Hallo

von LMD exisitiert auch eine Komponente die dies erledigt:
TLMDOneInstance
Safeguards that only one instance of your application can be executed. The component offers several options and an additional action event.

Shalom
Manfred

mkinzler 30. Jan 2010 16:48

Re: Programm nur einmal starten
 
Es geht ihm aber nicht um die eigene Anwendung :zwinker:

manfred_h 30. Jan 2010 16:51

Re: Programm nur einmal starten
 
Ups. :duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz