Einzelnen Beitrag anzeigen

Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Createmutex / Windows 7 / 64bit Problem

  Alt 10. Nov 2009, 13:51
Ich frage mich ein wenig, wozu man da ein Mutex bemüht. Viel sauberer wäre es imho den Service Manager einfach zu fragen ob der Service läuft. Das ist nicht nur einfacher, sondern auch sicherer (es gibt nämlich einen Zeitraum in der der Mutex noch nicht existiert, Dein Service aber im Begriff ist zu starten):

Delphi-Quellcode:
uses winsvc;

function IsServiceRunning(serviceName : string) : Boolean;
var
  scmHandle : THandle;
  serviceHandle : THandle;
  serviceStatus : TServiceStatus;
begin
  Result := FALSE;
  scmHandle := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, GENERIC_READ);
  if scmHandle <> 0 then
    begin
      serviceHandle := OpenService(scmHandle, PChar(serviceName), SERVICE_QUERY_STATUS);
      if serviceHandle <> 0 then
        begin
          if QueryServiceStatus(serviceHandle, serviceStatus) then
            result := serviceStatus.dwCurrentState <> SERVICE_STOPPED;
          CloseServiceHandle(serviceHandle);
        end;
      CloseServiceHandle(scmHandle);
    end;
end;
Wenn Du wirklich ein Mutex nutzen magst, dann sollte es meiner Ansicht nach notwendig sein, den Mutex im globalen Namespace zu erstellen. Dazu musst Du Dir dann vorher entsprechende Rechte besorgen.
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  Mit Zitat antworten Zitat