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 |
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?!
|
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 |
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. |
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Zitat:
|
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Wie wäre es mit einem Mutex?
|
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Hallo!
Zitat:
Offensichtlich ist der Mutex benutzerbezogen. Gruß Dietmar Brüggendiek |
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: |
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!
|
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
|
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Zitat:
|
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. |
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?). |
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).
|
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... |
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Kann ich den Service eigentlich auch über Shellexecute oder so starten?
|
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? |
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
|
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
und wie macht norton etc. das dann?
|
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Zitat:
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 |
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
thx für die hilfe :thuimb:
Zitat:
phoenix |
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Zitat:
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. |
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Zitat:
Der TS ist doch auch nur ein Programm, welches CreateWindowStation aufruft. Oder nicht? |
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:
Ich meine anstatt Mutex, da das ja nicht zu funktioniern scheint.
GlobalAddAtom(string);
|
Re: Prog auch bei mehreren angemeldeten Benutzern nur 1x sta
Hi,
Zitat:
Zitat:
Habe es gerade probiert, mit Global\ kann man das Programm dann tatsächlich nur einmal auf der Maschine starten. lg Sebastian |
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