AGB  ·  Datenschutz  ·  Impressum  







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

shellexecute nach createmutex

Ein Thema von eyeless · begonnen am 16. Aug 2005 · letzter Beitrag vom 16. Aug 2005
Antwort Antwort
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#1

shellexecute nach createmutex

  Alt 16. Aug 2005, 14:46
hallo,

ich habe eine routine, die per createmutex testet, ob ein programm läuft und wenn nicht, dann soll es gestartet werden:

Delphi-Quellcode:
const
  cMutexID = 'MoppleMapper';
var
  Mutex: THandle;
  HAPPLICATION: HWND;
begin

Mutex := CreateMutex(nil, True, cMutexID);
if (Mutex <> 0) and (GetLastError = 0) then
 begin
  WinExec(PChar(ExtractFilePath(Application.ExeName) + 'moppl_map.exe'), SW_SHOW);
  Mutex := CreateMutex(nil, True, cMutexID);
 end;


{HAPPLICATION := 0;
repeat
HAPPLICATION := FindWindowEx(0,HAPPLICATION, 'TApplication', PChar('MoppleMapper'));
until HAPPLICATION <> Application.Handle;}


end;
wenn ich das jez ausführe und das programm lief schon, iss alles super, WENN das programm allerdings vorher noch nicht lief und ich die procedure ausführe, macht der cursor für ca. 5 sec nur einen auf sanduhr und dann gehts weiter.

warum? muss ich den mutex dann wieder löschen? wie?

haha, ok, hat sich erledigt, CloseHandle(mutex), was sonst ... sorry, kann gelöscht werden ..

mfg, eyeless
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: shellexecute nach createmutex

  Alt 16. Aug 2005, 15:08
Der Mutex "stirbt" mit der letzten Referenz auf ihn. Sobald dein Programm beendet wird, ist der Mutex weg. Daher funktioniert es beim nächsten Mal den Mutex wieder zu erstellen.

Außerdem solltest du ShellExecute verwenden, nicht WinExec - NIE WinExec!
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#3

Re: shellexecute nach createmutex

  Alt 16. Aug 2005, 21:11
Erlärst du uns mal bitte, wieso CloseHandle das Problem gelöst hat?

Da du WinExec benutzt hast, könnte dies hier das Problem sein.
Zitat:
The WinExec function returns when the started process calls the GetMessage function or a time-out limit is reached. To avoid waiting for the time out delay, call the GetMessage function as soon as possible in any process started by a call to WinExec.
Wenn aber dein Ziel ist, daß (unter der Voraussetzung, daß nur dein Programm dieses andere Programm startet) dieses andere Programm nur einmal läuft, ist der obige Code IMO nicht sehr sinnvoll (abgesehen von WinExec). Denn dann solltest du warten, bis der Prozeß beendet wird und dann den Mutex killen ...

Irgendwie ist mir zu hoch, was du vorhast
  Mit Zitat antworten Zitat
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#4

Re: shellexecute nach createmutex

  Alt 16. Aug 2005, 21:24
closeHandle hat mir insofern geholfen, dass der mutex irgendwie das ausführen von dem programm (per winexec UND shellexecute) verhindert hat. durch closehandle wird er nun gekillt, das programm erfolgreich mit winexec gestartet und ein neuer mutex, der das programm diesmal findet, erstellt.

ich denke jedenfalls, das es so ist, jedenfalls funzt es nun ...

mfg, eyeless
  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 04:03 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