Aktuelle Zeit: 13.08.2020 11:07

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 08.08.2019 23:53 
Offline

Registriert: 06.03.2019 21:52
Hallo Leute,

muss nochmal ein Thema von hinten aufrollen. Mein Programmpaket besteht aus nunmehr 4 Teilen (4 Exe-Dateien), die auf den mehr oder weniger gleichen Datenbestand zugreifen und diesen manipulieren. Es ist wichtig, dass keines dieser Programme mit mehreren Instanzen laufen kann.

Habe dazu aus diesem Post viewtopic.php?f=16&p=260173#p260173 den Code verwendet und ein wenig angepasst, genaugenommen habe ich statt ursprünglich
Code:
g_hMutexAppRunning = CreateMutex_( #Null, #Null, "Global\MyApplication1")

das hier eingebaut
Code:
g_hMutexAppRunning = CreateMutex_( #Null, #Null, "Global\"+GetFilePart(ProgramFilename(),#PB_FileSystem_NoExtension))
, damit jedes Programm nur einmal starten kann. Funktioniert aber nur teilweise!
Code:
Global g_hMutexAppRunning

Procedure AppInstanceExists()
   Protected bAppRunning = FALSE;
  g_hMutexAppRunning = CreateMutex_( #Null, #Null, "Global\"+GetFilePart(ProgramFilename(),#PB_FileSystem_NoExtension))
  If (g_hMutexAppRunning <> #Null) And (GetLastError_() = #ERROR_ALREADY_EXISTS)
    CloseHandle_( g_hMutexAppRunning );
    g_hMutexAppRunning = #Null;
  EndIf
  If g_hMutexAppRunning
    ProcedureReturn #False;
  Else
    ProcedureReturn #True
  EndIf
EndProcedure
 
If AppInstanceExists()
  End
EndIf
CloseHandle_(g_hMutexAppRunning)

Ich kann damit jedes Programm nur 1x vom Startmenü starten (so weit so gut). Aber 3 der 4 Progs sind auch vom 4. Prog per
Code:
RunProgramm
zu starten und damit kann ich jedes der 3 Progs jeweils ein zweites Mal starten. Wie kann ich sicher verhindern, dass ein Prog mit mehr als nur 1 Instanz läuft?

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 09.08.2019 03:09 
Offline
Benutzeravatar

Registriert: 17.05.2007 09:30
Wohnort: Linz - Austria
Code:
g_hMutexAppRunning = CreateMutex_( #Null, #TRUE, "Global\MyApplication1")
https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createmutexw


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 09.08.2019 15:50 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Beispiel:
Code:
Procedure.i InstanceAlreadyExists(Mutex.s)
  Protected handle.i
  handle = CreateMutex_(#Null,#True,Mutex)
  If handle
    If GetLastError_() = #ERROR_ALREADY_EXISTS
      ReleaseMutex_(handle)
      CloseHandle_(handle)
      ProcedureReturn #True
    EndIf
    ProcedureReturn #False
  EndIf
  ProcedureReturn -1
EndProcedure

_________________

Links:
PureBasic Discord
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 09.08.2019 16:11 
Offline

Registriert: 06.03.2019 21:52
Hallo chi und Mijikai,

vielen Dank für Eure Beiträge, aber mit beiden Ansätzen kann ich das Problem nicht lösen. Werde jetzt wahrscheinlich eine "Lockfile"-Lösung verfolgen.

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 09.08.2019 16:27 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Je nachdem, wie Du Deine EXE mit RunProgram() aufrufst, werden Groß-/Kleinschreibung beachtet. Demzufolge ist dann auch der Mutex anders.

ein
Code:
 ... "Global\" + LCase(GetFilePart(ProgramFilename(), #PB_FileSystem_NoExtension)))

sollte hier schon reichen.

Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 09.08.2019 17:58 
Offline

Registriert: 06.03.2019 21:52
Hallo Kiffi,

auch Dir besten Dank, aber das Problem bleibt auch damit bestehen. Habe Deinen Vorschlag ausprobiert, zusätzlich auch mit LCase im RunProgramm-Befehl - will nicht. Meine Process-Explorer Software zeigt die beiden Instanzen einmal als "eigenständigen Eintrag" und einmal als "Unter-Eintrag" des aufrufenden Programmes (sorry für die unprofessionelle Beschreibung). Evtl. sind das aber schon 2 verschiedene Programme für die Instanzprüfung und deswegen klappt es nicht.

Ist aber auch wurscht - habe eine Lockfile-Lösung geschrieben, funktioniert offenbar gut, wenn es auch nicht meine erste Wahl gewesen ist. Nach einen Systemabsturz, LaptopAkku leer, ..., wird es deswegen sicher Probleme geben. Dann braucht es wohl noch ein "DeLock"-Tool ...

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Denkfehler bei "nur eine Instanz erlauben"
BeitragVerfasst: 09.08.2019 20:12 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Vielleicht hilft dir das Modul von ts-soft:
OnlyOne Module Crossplattform

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download – Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye