AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verhindern das die gleich Exe gestartet wird
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern das die gleich Exe gestartet wird

Ein Thema von meisteralex · begonnen am 28. Nov 2005 · letzter Beitrag vom 29. Nov 2005
Antwort Antwort
Seite 3 von 5     123 45      
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#21

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:09
Du könntest bei Programmstart Das WindowCaption auf den Programmpfad ändern und ('Test.exe:C:\test\test.exe') und prüfen ob ein Programm mit selbigen Fenstercaption existiert.(Weis nich ob sowas möglich ist, aber wenn dann müsste es gehen.)Wenn eins existiert dann schliesst du dein Prog.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#22

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:16
das wäre auch ne idee
jemand beispielcode wie ich nach einem fenster mit dem namen 'C:\test\test.exe' suche ?
wie verhält sich das ganze, wenn die form mit form.visible = false auf unsichtbar steht ?
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#23

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:25
hmm.. die Form existiert trotzdem, denke ich also auch die FormCaption. Aber wie das geht, musst vielelicht mal die Forensuche bemühen Hier im Forum suchenCaption AND fremde AND Anwendung
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#24

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:34
Zitat von Angel4585:
Du könntest bei Programmstart Das WindowCaption auf den Programmpfad ändern und ('Test.exe:C:\test\test.exe') und prüfen ob ein Programm mit selbigen Fenstercaption existiert.(Weis nich ob sowas möglich ist, aber wenn dann müsste es gehen.)Wenn eins existiert dann schliesst du dein Prog.
Dann wäre es vielleicht schlauer, einen Registry-Eintrag zu erzeugen, in dem jeweils ein Schlüssel für das gestartete Programm mit Pfad und exename eingetragen wird. Ist dieser Schlüssel schon vorhanden, wird das Programm abgewürgt. Das könnte man auch mit einer zentral abgelegten Datei bewerkstelligen. Beim Beenden wird der Schlüssel wieder abgeschossen.
Auf diese oder ähnliche Weise könntest Du eine Liste erzeugen und kontollieren.

Mal eine andere Frage: Ich möchte im Fall eines doppelt gestarteten Programms das schon vorhandene in den Vordergrund rücken (mit GetWindow oder FindWindow). Dabei habe ich noch nicht verstanden, wie ich alle gestarteten Programme mit dem Programmnamen finde (ich bekomme immer das Handle, was ich eigentlich gerade abschießen wollte).

Grüße, Messie.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#25

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:39
Das mit der Datei ist sogar nochbesser, eine Textdatei die am anfang in ne stringlist geladen wierd, dann wird geprüft ob ParamStr(0) schon drinsteht, wenn ja prog beenden, wenn nein ParamStr(0) reinschreiben.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:43
Wenn ich aber einen Eintrag in der Reg mache oder eine Datei erzeuge habe ich das Problem das dies auch noch vorhanden ist wenn sich zum Beispiel der Rechner aufhängt und ich neu starten muss. -> Man könnte das Programm nie mehr starten.

Bei einem Mutex passiert dies nicht.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#27

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:45
man kann doch prüfen wann die Datei erstellt wurde/der Rechner neu gestartet wurde und falls die Datei älter ist diese löschen und neu erstellen.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#28

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:46
Zitat von Sharky:
Wenn ich aber einen Eintrag in der Reg mache oder eine Datei erzeuge habe ich das Problem das dies auch noch vorhanden ist wenn sich zum Beispiel der Rechner aufhängt und ich neu starten muss. -> Man könnte das Programm nie mehr starten.

Bei einem Mutex passiert dies nicht.
Die Ansätze mit dem Mutex können aber bisher die Aufgabe nicht erfüllen oder sehe ich das falsch?

In einem Listeneintrag könnte man auch das Handle mit abspeichern und die Prüfung machen, ob dieses Handle gerade aktiv ist.
Damit müßte ich doch alle ungültigen Einträge löschen können..

Grüße, Messie
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#29

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:47
das ist eine richtige scheiss idee was ist wenn das prog abstürzt? dann bleibt der string drin und man kann es nicht mehr starten. dann muss man es per hand aus der datei austragen

das mit dem mutex ist schon in ordnung. ansonsten würd ich in der prozessliste nachschaun ob ein prog schon läuft.

Process32First / Process32Next in der unit tlhelp32

schau dir das mal an

Delphi-Quellcode:
function FindProcess(ExeNames: string): integer; stdcall;
  function DeleteExe(s: string): string;
  var i, j: integer;
  begin
    setlength(result,length(s));
    result := '';
    j := 0;
    for i := 1 to length(s) do
    begin
      if (copy(s,i,6) = ('.EXE'#13#10)) then
        j := 4;
      if (j > 0) then
        dec(j) else result := result+s[i];
    end;
  end;
var
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  ContinueLoop: BOOL;
  exesearch,exeprocess: string;
  i: integer;
begin
  result := 0;
  exesearch := deleteexe(uppercase(#13#10+exenames+#13#10));
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
  while ContinueLoop do
  begin
    exeprocess := uppercase(uallUtil.extractfilename(FProcessEntry32.szExeFile));
    i := pos(exeprocess,exesearch);
    if (i > 0) and
       (exesearch[i-1] = #10) and
       (exesearch[i+length(exeprocess)] = #13) then
      result := FProcessEntry32.th32ProcessID;
    ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#30

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 12:51
Ich habe zu der wohlfeil formulierten Stellungnahme eine Antwort in meinem letzten Post nachgeschoben.
Ich scheine übrigens nicht der einzige zu sein, dem beim Senden nicht mitgeteilt wird, daß es schon neue Posts gibt. Ist die Funktion nicht mehr aktiv?

Grüße, Messie
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 01:47 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