Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verhindern das die gleich Exe gestartet wird (https://www.delphipraxis.net/57868-verhindern-das-die-gleich-exe-gestartet-wird.html)

Angel4585 28. Nov 2005 11:52

Re: Verhindern das die gleich Exe gestartet wird
 
Also ich bekomm ne Meldung(Rot und Fett) das neue Nachrichten hinzugekommen sind

brechi 28. Nov 2005 11:52

Re: Verhindern das die gleich Exe gestartet wird
 
und mit dem mutex gehts so:

Delphi-Quellcode:
program Project2;

uses
  Forms,
  windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var mhandle,i: integer;
s: String;
begin
  s := paramstr(0);
  for i := 1 to length(s) do if s[i] = '\' then s[i] := '-';
  mHandle := CreateMutex(nil, true, PChar(s));
  if (GetLastError = Error_Already_Exists) then halt;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  if mHandle <> 0 then CloseHandle(mHandle);
end.

Jelly 28. Nov 2005 12:02

Re: Verhindern das die gleich Exe gestartet wird
 
Das mit den Mutex klappt. Und mehr werde ich zu diesem Thema nicht schreiben. Was sollen denn nun all diese abstrusen Ideen mit irgendwas in die Registry schreiben oder sonstwie nach Fensterhandles kucken. Der Code wurde bereits neben mir von anderen direkt hier reingepostet. Die Lösung wurde auf dem Silbertablett serviert.

meisteralex 28. Nov 2005 12:05

Re: Verhindern das die gleich Exe gestartet wird
 
werde das letzte code beispiel gleich mal ausprobieren wenn ich zu hause bin.
schonmal vielen dank an alle genies hier!

brechi 28. Nov 2005 12:13

Re: Verhindern das die gleich Exe gestartet wird
 
Jelly dein Code klappt nicht weil Mutexe wohl nicht '\' unterstützt. Das hatte Sharky schon auf der 1. Seite glaub ich gepostet. und ich habe keine Lösung gesehen bei der die '\' durch z.b. '-' ersetzt wurde. Deshalb hab ich das nochmal geschrieben und noch ne 2. Möglichkeit gezeigt(Process32First, Process32Next). Anscheinend hast du deinen code (application.exename) nicht getestet, weil der ja nicht funktioniert.

Deshalb wird auch weiterdiskutiert. Hast du vielleicht nicht alle Posts gelesen?

Jelly 28. Nov 2005 12:29

Re: Verhindern das die gleich Exe gestartet wird
 
Zitat:

Zitat von brechi
Hast du vielleicht nicht alle Posts gelesen?

Nee, wohl nicht, aber die meisten. Jedenfalls ist Mutex der richtige Ansatz. Mich hat nur aufgeregt, dass plötzlich Ideen aufkamen, wo irgendwelche Werte in die Registry untergebracht werden. Dass ein Mutex ein "\" enthalten, wusst ich in der Tat nicht. Aber das mit dem Ersetzen von '\' nach '-' sollte dann aber klappen, es sei denn noch andere Zeichen seien nicht erlaubt.

Übrigens, zum Ersetzen würde ich die StringReplace Funktion nutzen statt die Zeichfolgen Zeichen für Zeichen zu durchforsten.

messie 28. Nov 2005 13:32

Re: Verhindern das die gleich Exe gestartet wird
 
Kannst Dich wieder abregen, ich hatte ja nur auf den Vorschlag reagiert nach titlecaptions etc. zu suchen. Eigentlich wollte ich ne eigene Frage dort unterbringen aber die ist in der Aufregung wohl untergegangen. Ich habe jetzt nochmal alles gelesen und nachgesehen, dabei ist mir was aufgefallen: error_already_exists funzt laut MS nur bei vollen Zugriffsrechten. Ansonsten soll man OpenMutex verwenden. Und weil das leidige Thema Zugrifssrechte mit jedem Windows-Patch wichtiger wird, vielleicht nochmal nachlesen:

CreateMutex

Zitat:

If the mutex is a named mutex and the object existed before this function call, the return value is a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS. However, if the second caller has limited access rights, the function will fail with ERROR_ACCESS_DENIED and the caller should use the OpenMutex function.
Damit bin ich auch gleich wieder bei meiner Frage von vorhin: Wenn ich das Handle der bereits aktiven exe von CreateMutex bekomme, warum kann ich diese dann nicht mit BringWindowToTop in den Vordergrund rücken?


Grüße, Messie

Jelly 28. Nov 2005 13:48

Re: Verhindern das die gleich Exe gestartet wird
 
Zitat:

Zitat von messie
Kannst Dich wieder abregen

Gut, bin wieder ruhig und leg die Füsse wieder auf den Tisch.

Zitat:

Zitat von messie
Damit bin ich auch gleich wieder bei meiner Frage von vorhin: Wenn ich das Handle der bereits aktiven exe von CreateMutex bekomme, warum kann ich diese dann nicht mit BringWindowToTop in den Vordergrund rücken?

Hast du den Code hier schon mal probiert. Genau den benutze ich in einem meiner Programme und dort klappt das mit dem BringToFront einwandfrei.

messie 28. Nov 2005 13:56

Re: Verhindern das die gleich Exe gestartet wird
 
Ja, den hatte ich schon probiert, geht aber nicht. Ich überlege gerade ob es daran liegt, daß ich die Aufrufe in initialization-Teil stehen habe. Mir ist schonmal aufgefallen, daß dort nicht alles funzt.

Grüße, Messie

Jelly 28. Nov 2005 14:00

Re: Verhindern das die gleich Exe gestartet wird
 
In welchem Initialization Teil... Bei mir stehts gleich im Quellcode der Projektdatei (.dpr). Ich rufe die Prozedur direkt hinter der Zeile
application.Title := 'blabla' ;
auf... Also so:
Delphi-Quellcode:
const
  MyGUID = '{641F16BC-EFE7-4EF4-B45D-52F5192C74E9}';
begin
  Application.Initialize;
  Application.Title := 'Release Management und Versionen Kontrolle';

  EnsureSingleInstance (MyGUID) ;

  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmRema, frmRema);
  Application.Run;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Seite 4 von 5   « Erste     234 5      

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