Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prog auch bei mehreren angemeldeten Benutzern nur 1x starten (https://www.delphipraxis.net/17651-prog-auch-bei-mehreren-angemeldeten-benutzern-nur-1x-starten.html)

xineohp 7. Mär 2004 21:13


Prog auch bei mehreren angemeldeten Benutzern nur 1x starten
 
hi,

Ich würde gerne ein Progamm schreiben, das auch jedem Rechner exakt ein mal ausgeführt wird und zwar egal wie viele Benuter gerade angemeldet sind.

Mommentan steht es einfach im Autostart, damit sicher gestellt ist, dass es immer läuft, aber da XP ein Multiusersystem ist, können auch mal zwei Benutzer gleichzeitig angemeldet sein, und dann läuft mein Prog halt auch zwei mal, was es nicht soll.

Ich hab auch schon daran gedacht einen Service/Dienst zu schreiben, aber, da ich damit noch nie was zutun hatte, hab ich keine Ahnung wie das geht und kriegs einfach nicht gebacken einen zum laufen zubringen ... zu mindest wird er nie in der Prozessliste aufgeführt.

thx 4 help
phoenix

SirThornberry 7. Mär 2004 21:38

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
seit wann können sich bei xp mehrere Nutzer gleichzeitig anmelden?? Die aktuelle Session wird doch getrennt wenn man sich unter einem anderen Namen anmeldet?!

fkerber 7. Mär 2004 21:43

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Hi!

Nein, unter XP gibt es Benutzer wechseln, da bleibt der andere angemeldet.

Ciao fkerber

himitsu 7. Mär 2004 22:11

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Stimmt.


Es gibt ja einige Service-Anwendungen, die werden noch vor der Benutzeranmeldung gestartet und bleiben beim Benutzerwechel, oder beim Abmelden weiterhin aktiv. Und da sie vorm Anmelden gestartet werden, werden sie natürlich bei einem Wechsel nicht ein zweites Mal gestartet.

Du könntest dich ja versuch dort einzunisten.


Frag mich aber nicht wie und wo.

xineohp 7. Mär 2004 22:18

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Zitat:

Frag mich aber nicht wie und wo.
genau das ist die Frage :wiejetzt:

Chewie 7. Mär 2004 22:25

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Wie wäre es mit einem Hier im Forum suchenMutex?

Brüggendiek 7. Mär 2004 22:47

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Hallo!

Zitat:

Zitat von Chewie
Wie wäre es mit einem Hier im Forum suchenMutex?

Das scheint nicht zu klappen! Ich habe ein Programm, das über Mutex nur 1 Instanz erlaubt. Interessehalber habe ich das mal mit 2 gleichzeitig angemeldeten Benutzern gestartet - ging leider!
Offensichtlich ist der Mutex benutzerbezogen.

Gruß

Dietmar Brüggendiek

xineohp 7. Mär 2004 22:53

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
aha, nie von gehört :gruebel: ... man lernt nie aus :roll:

klingt nicht schlecht die Idee, zumindes nachdem was ich dazu mal überflogen habe... aber was ist der Unterschied zwischen einem Semaphore und einem Mutex?

aber mir ist da eben noch ein weiteres Problem aufgefallen ... das Programm soll ein TrayIcon haben. Wenn das Prog nun beim 1. Benutzer gestartet wird erscheint es in dessen Tray, wechselt man dann aber zum zweiten Benutzer, und verhindert, dass das Prog noch mal gestartet wird, dann erscheint es dort auch nicht im Tray, weil es ja ein Prozess des 1. Users ist :wall:

Chewie 7. Mär 2004 23:19

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Bei einer Semaphore kann angegeben werden, wie viele Exemplare gleichzeitig existieren dürfen. Probier mal aus, ob es mit einer Semaphore klappt!

xineohp 8. Mär 2004 17:31

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
bin nach wie vor skeptisch, ob das so funktionieren kann ... siehe letzten post von mir

xineohp 8. Mär 2004 17:36

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Zitat:

Zitat von xineohp
bin nach wie vor skeptisch, ob das so funktionieren kann ... siehe letzten post von mir


Chewie 8. Mär 2004 17:39

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Wenn das Trayicon unbedingt angezeigt werden muss, würde ich das ganze Programm vielleicht in zwei Programme aufsplitten: Einen Service, der automatisch gestartet wird (und nur einmal läuft) und ein Administrationsprogramm, das für jeden benutzer einzeln ausgeführt wird. Dieses stellt dann das TrayIcon zur Verfügung.
Kommunizieren kannst du mit dem prozess dann via Mailslots, Pipes, MMFs oder TCP/IP.

xineohp 8. Mär 2004 18:35

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
hm, das macht die Sache immer komplizierter... das Programm komuniziert nämlich schon mit anderen PCs. Mich würde interessieren wie z.B. Firewalls das Problem lösen z.B. Norton oder so, da gibts ja auch immer ein Trayicon.

Aber könntest du mir mal sagen wie ich überhupt einen Service hinkriege? Mit dem Skelett der "Service-Anwendung" von Delphi komm ioch irgendwie nicht zurecht. Ich seh den prozess nie im Taskmanager (müsste doch eigentlich drin sein oder?).

Chewie 8. Mär 2004 19:07

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Wie startest du den Service? Du musst ihn nämlich zunächst installieren (<Name des Services> /install) und dann am besten über die Dienstverwaltung starten (Systemsteuerung -> Verwaltung -> Dienste).

xineohp 8. Mär 2004 19:13

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
hm, ich hab in Delphi einfach /INSTALL als Parameter eingetragen, geht das nicht auch?

EDIT:
Perfekt, das mit dem Starten war das Entscheidende. Jetzt muss ich nur noch das mit dem tray hinkriegen, aber für Anfang bin ich auch schn mit nem eifachen Form zufrieden. ma schaun...

xineohp 8. Mär 2004 21:06

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Kann ich den Service eigentlich auch über Shellexecute oder so starten?

xineohp 9. Mär 2004 20:40

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
keiner eine Idee?

Naja, dann erstmal eine geänderte Fragestellung: Wie erstelle ich einen Service mit "Formular", also mit Benutzeroberfläche?

PlanetofBlade 2. Apr 2004 08:30

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Geht das überhaupt? Dienste sin Hintergrundprogramme, da gibt's keine Fenster! Aber alles imho :P

xineohp 3. Apr 2004 17:04

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
und wie macht norton etc. das dann?

NicoDE 3. Apr 2004 17:58

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Zitat:

Zitat von xineohp
und wie macht norton etc. das dann?

Da interaktive Dienste (Services) ein nicht zu unterschätzendes Sicherheitsrisiko darstellen, gehe ich davon aus, dass sie einen nicht-interaktiven Service und eine normale GUI-Anwedung schreiben, die mit dem Service kommuniziert (die Wahl (der Qual) der Art und Weise der Interprozeßkommunikation bleibt Dir überlassen).

Per ShellExecute kannst Du den Dienst zwar nicht starten (da Dienste vom Service Control Manager (SCM) verwaltet werden) - aber auf der Konsole kannst Du einen Dienst mit 'net start foo' starten, bzw. mit 'net stop foo' beenden.

Um einen Start bei mehreren angemeldeten Benutzern zu verhindern (was ja nur auf einem System mit Terminal Server -Funktionalität vorkommen kann), kannst Du ein Mutex-Objekt im globalen Namensraum erzeugen (der Name beim Aufruf von CreateMutex muss dazu mit 'Global\' beginnen).


Gruss Nico

xineohp 3. Apr 2004 18:07

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
thx für die hilfe :thuimb:

Zitat:

was ja nur auf einem System mit Terminal Server -Funktionalität vorkommen kann
weiß zwar nicht was das ist :gruebel: aber auf meinem notebook sind auch öfter mal zwei user angemeldet ... außerdem gehts mir hier ums prinzip :mrgreen: wenn schon mit mutex, dann richtig ;)

phoenix

NicoDE 3. Apr 2004 18:15

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Zitat:

Zitat von xineohp
weiß zwar nicht was das ist :gruebel:

Das ist eigentlich eine spezielle Server-Version von Windows, die die gleichzeitige Anmeldung von mehreren Benutzern erlaubt.
Windows XP hat einen integrierten Terminal Server mit einer Ein-Benutzer-Lizenz (also etwas beschnitten).

Ich habe es deswegen hingeschrieben, weil auf einem System ohne Terminal Server -Funktionalität (lässt sich ja bei WinXP deaktivieren) das Erzeugen eines Mutex, der mit 'Global\' oder 'Local\' beginnt, fehlschlagen kann/wird.

Vjay 8. Apr 2004 08:17

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Zitat:

Zitat von NicoDE
Ich habe es deswegen hingeschrieben, weil auf einem System ohne Terminal Server -Funktionalität (lässt sich ja bei WinXP deaktivieren) das Erzeugen eines Mutex, der mit 'Global\' oder 'Local\' beginnt, fehlschlagen kann/wird.

Soweit ich weiss finden Mutexe sich auch nicht wenn man mehrere Desktops verwendet (CreateDesktop). Bist du da sicher dass das mit Global\ nur auf Terminal-Server-Systemen funktioniert. Weil das ist dem OS doch ziemlich egal ob da ein Terminalserver installiert ist oder nicht.
Der TS ist doch auch nur ein Programm, welches CreateWindowStation aufruft.

Oder nicht?

s14 8. Apr 2004 08:48

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
hallo zusammen,
ich hab hier gerade kein XP aber kann man das nicht auch atomar lösen 8)

Delphi-Quellcode:
GlobalAddAtom(string);
Ich meine anstatt Mutex, da das ja nicht zu funktioniern scheint.

slemke76 28. Mai 2008 19:13

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Hi,

Zitat:

Zitat von Vjay
Bist du da sicher dass das mit Global\ nur auf Terminal-Server-Systemen funktioniert. Weil das ist dem OS doch ziemlich egal ob da ein Terminalserver installiert ist oder nicht.

lt. msdn ist das egal:

Zitat:

Windows 2000: If Terminal Services is not running, the "Global\" and "Local\" prefixes are ignored. The remainder of the name can contain any character except the backslash character.
Quelle: http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx

Habe es gerade probiert, mit Global\ kann man das Programm dann tatsächlich nur einmal auf der Maschine starten.

lg
Sebastian

Remko 29. Mai 2008 21:10

Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
 
Slemke is right:
To detect existing application instances, use a global mutex or semaphore object with a known name. Prefix the object's name with "Global\" to ensure that the global namespace is used. This allows you to detect instances of your applications that are running in separate user sessions.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 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