Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Teminal Server Processes (https://www.delphipraxis.net/120608-teminal-server-processes.html)

danieleh 13. Sep 2008 16:10


Teminal Server Processes
 
Hallo

Ich habe eine Frage betreffend JwsclTerminalServer.
Und zwar möchte ich die Anzahl Prozesse der laufenden Anwendung (xyz.exe), über alle sessions hinweg herausfinden um die gleichzeitige Ausführung der App. zu beschränken.

Eine ähnliche Frage ist diese: http://www.delphipraxis.net/internal...t.php?t=125852. Obwohl die Frage sich auf einen Benutzer von mehreren Clients vebindend bezog, gab es doch den Hinweis die WTSEnumerateProcesses zu benutzen.

Nun bin ich nicht sicher ob zum Auslesen der Prozesse aller Sessions AdminRechte nötig sind oder nicht
Gemäss Microsoft (http://msdn.microsoft.com/en-us/library/aa383831(VS.85).aspx) scheint dies der Fall zu sein wenn ich das richtig verstehe (The caller must be a member of the Administrators group to enumerate processes that are running under a different user's context.)

Hätte jemand ein Tipp und evtl ein Stück Code? Ich kenn mich mit TS gar nid aus ...

Da ich momentan nur beschänkt zugriff auf einen TS habe kann ich auch nicht gut testen, also hoffe ich, auf Anhieb die richtige Lösung zu haben.

Vielen Dank
Daniele

Dezipaitor 13. Sep 2008 19:19

Re: Teminal Server Processes
 
Und hier geht es weiter: Remko shows us how to use the Terminal Server feature of JWSCL

Und ja, man braucht Adminrechte dazu.

Viel Spass.

danieleh 14. Sep 2008 09:56

Re: Teminal Server Processes
 
Hallo Dezipaitor

Danke für Deine Antwort.
Schade klappt es nur mit Adminrechte. Kann mann die Ausführung einer exe auf ein TS denn auch irgendwie anders beschränken (ohne Adminrechte)?
Wie sieht es mit semaphoren o.ä. aus ?

gruss, Daniele

Dezipaitor 14. Sep 2008 16:19

Re: Teminal Server Processes
 
Ich kann mich erinnern, dass es dazu schonmal einen Betrag hier gab. Ich glaube es war etwas mit "globaler Mutex". Einfach mal danach suchen.

danieleh 15. Sep 2008 16:23

Re: Teminal Server Processes
 
Hallo Dezipaitor

habe nun nach dem mutex gesucht, bin allerdings auf folgendes gestossen, was mein Zweck erfüllen würde.
Kannst Du mir bestätigen das dies auch für Terminal Server geht oder müsste ich noch etwas hizufügen ?

Delphi-Quellcode:
var
  MyAtom: ATOM;

initialization

  MyAtom := GlobalFindAtom('{03D1CB1A-5C2C-4B0D-9311-F585653FF733}');

  if MyAtom <> 0 then
  begin
    MessageBox(0, 'Programm läuft bereits.', nil, MB_OK or MB_ICONEXCLAMATION);
    MyAtom := 0;
    Halt(0);
  end else
    MyAtom := GlobalAddAtom('{03D1CB1A-5C2C-4B0D-9311-F585653FF733}');

finalization
  if MyAtom <> 0 then GlobalDeleteAtom(MyAtom);
end.

Dezipaitor 15. Sep 2008 16:32

Re: Teminal Server Processes
 
Nein, sollte nicht gehen.

Bitte suche im Forum nach "global mutex". Dann bekommst du gute Posts zu dem Thema mit 100% Quelltextgarantie!

hoika 15. Sep 2008 16:55

Re: Teminal Server Processes
 
Hallo,

zum Testen sollte auch ein XP reichen,
wenn du dich mit 2 Nutzern gleichzeitig anmeldest.


Heiko

danieleh 15. Sep 2008 17:06

Re: Teminal Server Processes
 
Danke für den Tipp Heiko. Da ich mich mit TS nicht auskenne kann ich nicht abschätzen was der Code auf dem TS für Auswirkungen hat (oder ob es zusätzliches Zeug dazu braucht)

ok, Danke Christian, dies die Mutex:

Delphi-Quellcode:
implementation

uses windows,Dialogs,sysutils;

var mHandle: THandle;   // Mutexhandle

Initialization
  mHandle := CreateMutex(nil,True,'Global\xxxxx');
  // mHandle := CreateMutex(nil,True,'xxxxx');
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then begin  
    // Anwendung läuft bereits
    {showMessage('Anwendung läuft bereits!!!!!');}   
    // Wenn du deine Meldung willst, mach die Klammern weg
    Halt;
  end;

finalization  // ... und Schluß
  if mHandle <> 0 then
    CloseHandle(mHandle)
end. {Dieter Hirt}

danieleh 15. Sep 2008 17:07

Re: Teminal Server Processes
 
Warum geht das mit dem GlobalAtom eigentlich nicht ?

Dezipaitor 15. Sep 2008 17:30

Re: Teminal Server Processes
 
Zitat:

Zitat von danieleh
Warum geht das mit dem GlobalAtom eigentlich nicht ?

Weil jede WindowStation ihre eigene Atomtabelle hat. Und jede Session kann neben Winsta, mehrere Windowstations besitzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz