vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Verhindern, 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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel