AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CreateMutex und seine Grenzen

Ein Thema von Patrick · begonnen am 5. Dez 2012 · letzter Beitrag vom 6. Dez 2012
Antwort Antwort
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#1

CreateMutex und seine Grenzen

  Alt 5. Dez 2012, 17:17
Hallo,

Ich überprüfe ob meine Anwendung schon läuft mit Hilfe des Mutex-Handles. Das funktioniert auch solange ich das mit dem selben Benutzer mache. Wenn ich allerdings den Benutzer wechsle kann ich meine Anwendung ein zweites mal starten. Das Handle ist sogar das gleiche!?

Ist das Handle auf Benutzer beschränkt? Wie kann ich meine Anwendung systemweit auf eine Instanz beschränken?

Danke für euer Hilfe!
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: CreateMutex und seine Grenzen

  Alt 5. Dez 2012, 17:37
Hallo,

hat das unterschiedliche setzen von
Zitat:
bInitialOwner [in]

If this value is TRUE and the caller created the mutex, the calling thread obtains initial ownership of the mutex object. Otherwise, the calling thread does not obtain ownership of the mutex. To determine if the caller created the mutex, see the Return Values section.
Quelle:
Auswirkungen auf das von Dir beschriebene Verhalten?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: CreateMutex und seine Grenzen

  Alt 6. Dez 2012, 08:13
Über Benutzergrenzen hinaus (dazu zählen auch Services und elevated Prozesse) geht es nur, wenn du die lpMutexAttributes initialisierst.

Delphi-Quellcode:
var
   FSA: SECURITY_ATTRIBUTES;
   FSD: SECURITY_DESCRIPTOR;
begin
   InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION);
   SetSecurityDescriptorDacl(@FSD, true, nil, false);
   FSA.lpSecurityDescriptor := @FSD;
   FSA.nLength := sizeof(SECURITY_ATTRIBUTES);
   FSA.bInheritHandle := true;
Wie es beim Mutex mit dem Namen aussieht, weiß ich grade nicht sicher. Bei Events muss der Name zusätzlich ein "Global\" Prefix beinhalten. Steht aber sicher was im MSDN.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 6. Dez 2012 um 08:16 Uhr)
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#4

AW: CreateMutex und seine Grenzen

  Alt 6. Dez 2012, 09:11
Jep, so funktioniert es! Danke.

Delphi-Quellcode:
var
  wndMain : HWND;
  FSA: SECURITY_ATTRIBUTES;
  FSD: SECURITY_DESCRIPTOR;
begin
  InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION);
  SetSecurityDescriptorDacl(@FSD, true, nil, false);
  FSA.lpSecurityDescriptor := @FSD;
  FSA.nLength := sizeof(SECURITY_ATTRIBUTES);
  FSA.bInheritHandle := true;

  mHandle := CreateMutex(@FSA, True, PWideChar('Global\' + Ident));
  if (GetLastError = ERROR_ALREADY_EXISTS) then
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#5

AW: CreateMutex und seine Grenzen

  Alt 6. Dez 2012, 13:03
Evtl. OT:

Mutex funktioniert ja auch nur auf derselben Station. Bei nicht netzwerkfähigen Programmen/Daten kann es interessant sein, einen Mehrfachaufruf auch durch andere Station im LAN zu unterbinden, wenn diese auf gemeinsame Verzeichnisse zugreifen (Um sich nicht gegenseitig die Daten zu zerschießen).

Da mir noch nichts besseres eingefallen ist, behelfe ich mich mit einem (exclusiven) Dateizugriff auf eine (evtl. auch Dummy-)Datei im gemeinsamen Verzeichnis und fange das IO-Result ab - wenn IOResult<>0, dann Programmende mit Meldung "Mehrfachaufruf ..."

  Mit Zitat antworten Zitat
Antwort Antwort


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 10:59 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