Programm nur einmal ausführbar

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Cyderic

Betreff: Programm nur einmal ausführbar

BeitragSa, Apr 14, 2012 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

ich hab zwar die Forensuche benutzt aber hab nichts hilfreiches gefunden (eine DLL, aber die ist auch nicht mehr erreichbar).

Ich will das mein Programm sich nur einmal ausführen lässt. Nehmen wir an er lädt sich das Programm 5 mal runter, kann er trotzdem nur eine Kopie davon starten.

Letztendlich muss ich ja nur noch dem Prozessnamen suchen. kann mir da jmd Tips geben vllt zur Windows API sodass ich da nicht gleich eine DLL mit liefern muss?

Hab noch überlegt ob ichs mir einfach mach und einfach irgendwo eine Datei hinwerf ...aber das wäre auf so viele Weisen unsauber gelöst, dass ichs doch lieber anhand des Prozesses überprüfen will.

Danke

PS.
Der Thread in dem es einen Tipp gibt zu dem Thema hilft mir nicht, da es sich um B3D Programme allgemein handelt. Und die Leute die mein Programm benutzen haben evtl mehrere B3D Programme am laufen.
Native ITler

the FR3AK

BeitragSa, Apr 14, 2012 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Am einfachsten geht es, wenn du mit der Winapi Funktion "FindWindow" das Programm suchst und wenn es gefunden wurde, nicht starten lässt, da es ja schon gestartet ist.
 

Cyderic

BeitragSa, Apr 14, 2012 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Tip, allerdings hat dieses Programm kein Fenster, es wird im Hintergrund ausgeführt.
Das ist mein Problem dabei^^

(Hätt ich erwähnen sollen, sry)
Native ITler

ozzi789

BeitragSa, Apr 14, 2012 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier, für dich und weitere Smile

https://www.blitzforum.de/foru...536#401536
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BtbN

BeitragSo, Apr 15, 2012 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Die ganz banale variante ist, einfach einen UDP Port zu binden, und versuchen, beim start diesen zu holen. Wenns nicht klappt, läuft das programm schon, und man kann sogar befehle senden.

ozzi789

BeitragSo, Apr 15, 2012 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Gute Idee BtbN

Jedoch sollte man bedenken, dass falls ein User eine Desktopfirewall installiert hat, dies je nach dem geblockt werden kann.
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

BtbN

BeitragSo, Apr 15, 2012 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei UDP nicht so oft wie bei TCP, und package loss sollte ja aufm localhost nicht das Problem sein.
Ne Firewall die kommunikation mit localhost blockt ist aber eher ramsch als nützlich..

ozzi789

BeitragSo, Apr 15, 2012 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Wobei du wieder Recht hast.
Betreffend UDP, wusst ich nicht Smile
Und ja, Package loss kann man getrost ignorieren.
Hab ich wieder was dazu gelernt!
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Apr 15, 2012 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch es mal hiermit
Code: [AUSKLAPPEN]
;Kernel32.decls
;CreateMutex%(MutexAttributes%, InitialOwner%, name$):"CreateMutexA"
;ReleaseMutex%(Handle%):"ReleaseMutex"
;
;GetLastError%():"GetLastError"

;BlitzPlusbeispiel:
Const ERROR_ALREADY_EXISTS = 183

hMutex = CreateMutex(0, True, "BlitzMax_Window_Class")

If hMutex <> 0 Then
   If GetLastError() = ERROR_ALREADY_EXISTS Then
      RuntimeError "Diese Anwendung läuft bereits!"
   End If
End If

ReleaseMutex(hMutex)

window = CreateWindow("Titel", 0, 0, 200, 200, 0, 3)

Repeat
Until WaitEvent() = $803
End

;BB3D Beispiel
Const ERROR_ALREADY_EXISTS        =     183

hMutex = CreateMutex(0, True, "Blitz Runtime Class")

If hMutex <> 0 Then
   If GetLastError() = ERROR_ALREADY_EXISTS Then
      RuntimeError "Diese Anwendung läuft bereits!"
   End If
End If

ReleaseMutex(hMutex)

Print "Hallöle!"
WaitKey
End
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group