| |
Visual-Basic EinsteigerVerhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: caramba | Datum: 01.06.13 08:19 |
| Hallo zusammen,
ich möchte verhindern, dass der gleiche Benutzer das Programm mehrmals auf seinem Rechner
öffnet. Sollte er das versuchen, sollte das Programm eine Fehlermeldung ausgeben und dann
z.B. auf den Desktop verzweigen.
Ist das mit den VB6-Bordmitteln machbar oder muss ich hier die Kontrolle applikatorisch
(z.B. durch die programmseitige Registrierung eines jeden Benutzers (Anmeldung/Abmeldung)
vornehmen?
Ich habe einmal was über das MUTEX-Objekt gelesen, weiss aber nicht wie das funktioniert
und ob sich die Kontolle dann auch nur auf den jeweilgen PC bezieht oder auf das ganze Netz-
werk?! Der Benutzer soll in der Lage sein, sich auf einem anderen PC nochmals anzumelden.
Danke für Eure Ratschläge.
Rainer
Beitrag wurde zuletzt am 01.06.13 um 08:32:33 editiert. | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: Blackbox | Datum: 01.06.13 10:44 |
| Hi,
wenn
App.PrevInstance = True
dann gib Meldung aus, dass das Prog nur einmal geöffnet werden darf und schließe es.
Das ist das VB6 Bordmittel. Das wirkt auch ganz gut. Aber
wenn es der Anwender kopiert und umbenennt, kann er die gleiche Anwendung mehrfach starten.
Das mit Mutex funktioniert so (Startobject auf Sub Main setzen):
Private Const ERROR_ALREADY_EXISTS As Long = 183&
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Declare Function CreateMutex Lib "kernel32.dll" Alias "CreateMutexA" _
(ByRef lpMutexAttributes As SECURITY_ATTRIBUTES, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long
Public Declare Function CloseHandle Lib "kernel32.dll" _
(ByVal hObject As Long) As Long
Public hMutex As Long
Private Sub Main()
Dim hSec As SECURITY_ATTRIBUTES
hSec.nLength = Len(hSec)
hMutex = CreateMutex(hSec, False, "FINGERWEG")
If Err.LastDllError = ERROR_ALREADY_EXISTS Then
MsgBox "Finger weg von meiner Exe, du Böser du!"
Exit Sub
End If
Form1.Show
' W I C H T I G !!!!
' Später vielleicht in der Form1 Terminate Event
' CloseHandle hMutex .... sonst kann man die eigene Exe nicht
' mehr starten und muss rebooten.
End Sub | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: Rippler | Datum: 01.06.13 12:00 |
| Wenn es nur um die Ausführungsverhinderung geht?
Private Sub Form_Activate()
If App.PrevInstance Then Unload Me
End Sub | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: caramba | Datum: 02.06.13 08:46 |
| Hallo Blackbox und Rippler,
danke für Eure Unterstützung. Ich habe die Mutex-Variante in mein Start-Modul
eingebaut - und es funktioniert.
Eine Frage habe ich aber noch (ehe ich die Programmversion ausliefere). Gehe ich
richtig in der Annahme, dass das Mutex-Objekt nur auf der jeweligen Arbeitsstation
wirksam ist?
Danke und einen schönen Sonntag.
Rainer | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: Blackbox | Datum: 02.06.13 09:35 |
| Hi Caramba,
Das Kernel-Objekt funktioniert nur auf einer Arbeitsstation, wobei man das named Mutex mit externen Programmen abfragen kann. Im Gegensatz zu der App.PrevInstance nützt ein Umbenennen der Exe nichts. Die Exe kann wirklich nur 1 Mal gestartet werden. | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: Franki | Datum: 03.06.13 01:56 |
| Hallo Rainer,
möchtest du zwischen User oder Rechner unterscheiden?
Du schreibst:
Zitat: | |
ich möchte verhindern, dass der gleiche Benutzer das Programm
mehrmals auf seinem Rechner
öffnet. | |
Und dann weiter:
Zitat: | |
Der Benutzer soll in der Lage sein, sich auf einem
anderen PC nochmals anzumelden.
| |
Anmelden auf einem anderen PC kann er sich ja sowieso.
Soll er dort auch dein Programm bedienen können oder nicht?
Wenn ja, was für einen Unterschied macht es, ob der selbe User dein Programm von zwei verschiedenen PCs (gleichzeitig) bedient oder von dem gleichen PC?
Tipps in den Antworten hast du ja schon bekommen, aber irgendwie stellt sich für mich die Frage was du eigentlich verhindern / ermöglichen möchtest und warum.
Gruß
Frank
| |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: caramba | Datum: 03.06.13 12:34 |
| Hallo Frank,
gerne erkläre ich Dir die Sachlage etwas genauer. Ich habe einen Kunden, welcher meine
Software auf ca. 12 Arbeitsplätzen einsetzt. Es geschieht dabei sehr oft, dass sich
einzelne Benutzer mit einem identischen Benutzernamen auf verschiedenen Arbeitsplätzen
anmelden. Oftmals handelt es sich dabei um gelegentliche User, welche sich als "Gast"
anmelden. Das ist soweit OK.
Es geschieht aber auch, dass der gleiche Benutzer A auf dem Arbeitsplatz das Programm
öffnet und nicht daran denkt, dass es bereits geöffnet ist (kleines Icon ind der Task-
leiste). Dadurch traten verschiedentlich Probleme auf, welche ich durch eine Implemtier-
ung des Mutex-Objektes vermeiden möchte.
Gruss
Rainer | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: caramba | Datum: 03.06.13 12:35 |
| Hi Blackbox,
danke für Dein Feedback. ich hatte vermutet, dass es nur auf der Arbeitsstation wirksam
ist, war aber nicht sicher.
Gruss
Rainer | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: Franki | Datum: 04.06.13 02:25 |
| Hallo Rainer,
dann hast du ja dein Problem gelöst.
evtl. noch das hier da es sich ja dann um den gleichen Rechner handelt:
http://www.vbarchiv.net/tipps/details.php?id=389
Gruß
Frank
| |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: caramba | Datum: 04.06.13 06:16 |
| Hallo Frank,
danke für die Zustellung des Artikels von Dieter. Die vorgeschlagene Variant, das
minimierte Form wieder in den Vordergrund zu bringen, ist sehr elegant.
RetVal = FindWindow(vbNullString, _
"Fenster-Titel Ihrer Anwendung") Bei mir ist es leider so, dass ich keinen festen Fenstertitel habe. Mal steht da
"Angebot erstellen" oder "Rechnung drucken" oder ...
Gruss
Rainer | |
Re: Verhindern, dass der gleiche Benutzer das Programm mehrmals aufruft | | | Autor: Blackbox | Datum: 04.06.13 18:05 |
| ups ... falscher Thread
Beitrag wurde zuletzt am 04.06.13 um 18:19:15 editiert. | |
Microsoft macht es etwas besser | | | Autor: Blackbox | Datum: 04.06.13 18:55 |
| Hi Caramba,
hier ein Beispiel von Microsoft:
http://support.microsoft.com/kb/242308/de
Den Instanzhandle zur bereits ausgeführten Anwendung gibt das App-Objekt ebenso:
App.hInstance
hInstance-Handle ist nicht das Process-Handle vom neuen Process, sondern von dem, der schon läuft.
Beitrag wurde zuletzt am 04.06.13 um 18:58:32 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|