![]() |
Seltsames Verhalten NT-Service Komponente
Hallo,
ich habe mit Delphi XE2 eine Service Anwendung angelegt. Dann einen Timer auf das Formular und folgenden Code hinterlegt:
Delphi-Quellcode:
Wenn ich den NT-Service mit run.exe /install installiere, dann startet notepad.exe. Starte ich den NT-Service mit "net start Service"2 passiert nichts. Starte ich run.exe in der Eingabeaufforderung, dann startet auch notepad.exe. Warum wird notepad.exe nicht gestartet wenn ich "net start Service2" eingebe ?? Beim Deinstallieren mit run.exe /uninstall startet notepad.exe übrigens auch.
unit Unit2;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs, Vcl.ExtCtrls; type TService2 = class(TService) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public function GetServiceController: TServiceController; override; { Public-Deklarationen } end; var Service2: TService2; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin Service2.Controller(CtrlCode); end; function TService2.GetServiceController: TServiceController; begin Result := ServiceController; end; function CreateProcessWithLogon(lpUsername: PWideChar; lpDomain: PWideChar; lpPassword: PWideChar; dwLogonFlags: DWORD; lpApplicationName: PWideChar; lpCommandLine: PWideChar; dwCreationFlags: DWORD; lpEnvironment: Pointer; lpCurrentDirectory: PWideChar; var lpStartupInfo: TStartupInfo; var lpProcessInfo: TProcessInformation): BOOL; stdcall; external 'advapi32' name 'CreateProcessWithLogonW'; function CreateEnvironmentBlock(var lpEnvironment: Pointer; hToken: THandle; bInherit: BOOL): BOOL; stdcall; external 'userenv'; function DestroyEnvironmentBlock(pEnvironment: Pointer): BOOL; stdcall; external 'userenv'; const LOGON_WITH_PROFILE = $00000001; {------------ Emulate the RunAs function --------------} function RunAs(User, Password, Command: String): Integer; var dwSize: DWORD; hToken: THandle; lpvEnv: Pointer; pi: TProcessInformation; si: TStartupInfo; szPath: Array [0..MAX_PATH] of WideChar; begin ZeroMemory(@szPath, SizeOf(szPath)); ZeroMemory(@pi, SizeOf(pi)); ZeroMemory(@si, SizeOf(si)); si.cb:=SizeOf(TStartupInfo); if LogonUser(PChar(User), nil, PChar(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then begin if CreateEnvironmentBlock(lpvEnv, hToken, True) then begin dwSize:=SizeOf(szPath) div SizeOf(WCHAR); if (GetCurrentDirectoryW(dwSize, @szPath) > 0) then begin if (CreateProcessWithLogon(PWideChar(WideString(User)), nil, PWideChar(WideString(Password)), LOGON_WITH_PROFILE, nil, PWideChar(WideString(Command)), CREATE_UNICODE_ENVIRONMENT, lpvEnv, szPath, si, pi)) then begin result:=ERROR_SUCCESS; CloseHandle(pi.hProcess); CloseHandle(pi.hThread); end else result:=GetLastError; end else result:=GetLastError; DestroyEnvironmentBlock(lpvEnv); end else result:=GetLastError; CloseHandle(hToken); end else result:=GetLastError; end; procedure TService2.Timer1Timer(Sender: TObject); begin RunAs('user','password','notepad.exe'); Timer1.Enabled:=false; end; end. kuba |
AW: Seltsames Verhalten NT-Service Komponente
Wenn der Service als Service läuft, dann gelten andere Spielregeln.
Kontrollier mal die Prozessliste (Prozesse aller Benutzer) und schau, ob dort Notepad auftaucht. |
AW: Seltsames Verhalten NT-Service Komponente
Und dazu noch, RunAs gibt zwar den Fehlercode zurück ( wieso eigentlich als vorzeichenbehafteter Integer und nicht als vorzeichenloses HRESULT? ),
aber du wertest diesen nicht aus. Nja, du wirst auch noch den Ziel-Desktop irgendwie zuweisen müssen, ansonsten wird der des Services verwendet und wenn der als "nicht interaktiv" eingestellt ist, dann gibt es Keinen. |
AW: Seltsames Verhalten NT-Service Komponente
Im Taskmanager taucht notepad.exe nur auf wenn ich den Service installiere/deinstalliere oder per Eingabeaufforderung run.exe eingebe.
Ich wollte ein Programm starten bevor ein Benutzer am Desktop angemeldet ist, natürlich nicht notepad.exe, sondern ein DOS Programm. Geht das überhaupt ?? KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Das Programm wird auf dem Desktop des Service laufen. Du wirst es also nicht sehen.
|
AW: Seltsames Verhalten NT-Service Komponente
Darf ich fragen, warum du dir den Aufwand des RunAs machst, wenn du eh schon einen Dienst hast und damit genug Rechte (sei es nun SYSTEM, LocalService oder NetworkService)? Oder geht's um ein längerlaufendes Programm, das mit dem Desktop interagieren können soll/muss?
MfG Dalai |
AW: Seltsames Verhalten NT-Service Komponente
Ich möchte ein Programm im Benutzerkontext starten bevor der Benutzer am Desktop angemeldet ist. Es geht mir konkret um die Benutzeranmeldung, während der Benutzeranmeldung erscheint der Start ORB. Wenn man darauf klickt geht das Startmenü auf. Ich möchte schon vor der Benutzeranmeldung ein Programm aktiv im Hintergrund haben, welches den Start ORB "unbrauchbar" macht sodaß kein Startmenü mehr erscheint.
Bisher habe ich noch keine Möglichkeit (z.B. Registry Tweak) gefunden um das Startmenü auszublenden. Da hab ich einfach mal ein bischen experementiert und bin auf dieses seltsame Verhalten mit RunAs gestoßen. Ist doch schon seltsam dass notepad.exe beim Installieren des Service gestartet wird, oder ? KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Nein, ist es nicht, es hätte mich gewundert, wenn es da nicht starten würde
|
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Zitat:
|
AW: Seltsames Verhalten NT-Service Komponente
@kuba
Du hattest doch schon mal eine funktionierende Version gepostet ![]() 28. Nov 2011, 22:16 oder was habe ich übersehen? |
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Habe mal experementiert ob es nicht möglich ist vorher schon ein Programm zu starten (bevor sich der Benutzer am Desktop angemeldet hat). Dabei fiel mir halt auf dass RunAs bei der Installation des Service funktioniert (notepad.exe wird getstartet), aber wenn der Service mit "net start Service2" gestartet wird dann wird notepad.exe eben nicht gestartet. KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Im Startmenü stehen doch sicher ohnehin keine relevanten Einträge mehr, denn das ist ja schließlich normalerweise das erste, das in einem Kiosk Modus per Policy rausfliegt. Machen kann der Benutzer damit also ohnehin nix.
Es geht also ausschließlich um die Optik, damit der Benutzer bei der Anmeldung nicht einmal kurz den Startbutton sieht, oder? Lohnt sich dafür der Aufwand? :gruebel: Und wenn dein Dienst in RunOnce des Benutzers eine kleine Anwendung ohne visuelle Oberfläche einträgt, sollte deren Ausführung ohnehin so schnell gehen, dass man nicht viel sieht bis der gestartet ist und "alles kaputt macht" :mrgreen:. |
AW: Seltsames Verhalten NT-Service Komponente
Autostart / Run / RunOnce ... einfach nur Shift drücken (ich glaub das war so), während des Starts und diese werden nicht ausgeführt.
|
AW: Seltsames Verhalten NT-Service Komponente
Es gibt doch auch noch die Möglichkeit den Verursacher (Explorer.exe) für das Startmenü auszutauschen.
Dann braucht man auch nichts zu entfernen :stupid: |
AW: Seltsames Verhalten NT-Service Komponente
Ab mindestens Windows 7 steht die Explorer.exe unter einem besonderen Schutz und kann nicht so einfach getauscht werden.
Da hast'e nichtmal als Admin das Recht dazu. |
AW: Seltsames Verhalten NT-Service Komponente
Mal eine "dumme" Frage... hast Du Dir die Events, die ein TService Dir bietet, überhaupt angeschaut?
Warum es schon/auch beim Installieren passiert, wird dabei klar - dafür wird nämlich auch eine Instanz initialisiert (und Events ausgelöst, etwa OnBeforeInstall und OnAfterInstall). Wenn Du unbedingt mit einem TTimer arbeiten möchtest, habe ihn zur Designtime als Enabled = false, und setzte das erst im OnExecute auf true. Eine minimale Fehlerverwaltung, sei es ins Event Log oder ne Textdatei zu schreiben, löst auch so viele Fehler... Zum eigentlichen Fehler gab's ja schon genug Rückmeldungen, da enthalte ich mich mal :) |
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Komisches Dingen halt. |
AW: Seltsames Verhalten NT-Service Komponente
Das funktioniert auch problemlos. Man kann nur die Exe selbst nicht so einfach manipulieren. ;-)
|
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Klang so, als wollte man die Explorer.exe direkt ändern, also die Datei löschen oder umbenennen und da hat Windows den Schutz erhöht. Im Gegensatz dazu sind in der Registry sind viele Stellen leider noch garnicht geschützt, und können sogar von einem "billigen" Benutzer verändert werden. Ändere einfach mal die Behandlung des Dateierweiterung .exe und leite die ausführung als Parameter an ein Programm weiter. Dann wird dieses Programm immer gestartet, wenn man im Explorer, über ein Icon oder über irgendeine andere Verlinkung, eine *.exe startet. |
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Also mit RunAs is nicht im NT-Service, ich denke daß ich per ![]() Da müsste sich doch was machen lassen um das dumme Startmenü endlich abzuschalten. KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Wenn Du schon Services nicht hinbekommst, würde ich von Winlogon die Hände lassen. Das erfordert noch deutlich mehr Einblicke in's System!
Und nur so nebenbei - der Logon-Bildschirm ist ein eigener Desktop (auf Desktops wurdest Du schon hingewiesen) und ein anderer Desktop als der des Users, in dem der Startschirm erscheint. Welche Konsequenzen das für Dein Vorhaben hat? Informier Dich über Desktops :) |
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Ich denke, daß es schon ganz gut funktioniert, Problem ist jedoch immer noch das Startmenue in der Anmeldephase. Da gibts doch noch "winsta0/winlogon", das ist doch der Desktop, der mir Probleme macht. Ich komme schon noch darauf ... KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Warum änderst du für den betroffenen User nicht die Shell vom Explorer auf ein eigenes Progrämmle?
Dann gibt es kein Startmenü mehr, sondern nur noch das, was du vorgibst. In der Registry kannst du auch noch das Verhalten von Strg-Alt-Entf beeinflussen. Vor allem, weil es fast komplett mit Bordmitteln zu erreichen ist, warum da etwas kompliziertes drumherum fummeln? |
AW: Seltsames Verhalten NT-Service Komponente
@Sir Rufo
:thumb: KISS |
AW: Seltsames Verhalten NT-Service Komponente
Und die nativen Möglichkeiten sind oftmals auch noch sicherer,
vorallem wenn man die Benutzerrechte voll ausnutzt. |
AW: Seltsames Verhalten NT-Service Komponente
@Sir Rufo
:thumb: KISS so hab ich es jetzt gemacht !! Funktioniert super :-D Problem ist nur, daß mein Programm jetzt wieder von einem Virenscanner bei Virustotal als Virus eingestuft wird. Das liegt wohl daran, daß ich mit meinem Programm die Shell in der Registry ändere. Ich schicke nochmal die Probs an den Virenscanner Hersteller. KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Zitat:
Ach so, jetzt weiß ich was du meinst DisableTaskManager usw. Ich dachte CTRL+ALT+DEL komplett abschalten. CTRL+ALT+DEL komplett abschalten soll ja angeblich nicht gehen. Zumindest weiß offiziell keiner wies geht. Ich hab aber schon mal einen PC gesehen bei dem nichts passiert ist wenn man CTRL+ALT+DEL gedrückt hat. Also irgendwie geht es, das steht fest !! Vielleicht hatten die in dem Internetcafe auch einfach die Tastatur "hardwareseitig" manipuliert. Wer weiß ... KUBA |
AW: Seltsames Verhalten NT-Service Komponente
Eigener Tastaturtreiber.
|
AW: Seltsames Verhalten NT-Service Komponente
Strg+Alt+Entf ist halt eine Sicherheitsmaßnahme.
Und diese läßt sich absichtlich nicht so einfach aushebeln. Genauso wie man diese Tastenkombination nicht virtuell (über ein Programm) erzeugen kann. OK, abgesehn von einem Tastaturtreiber, aber damit kann man es nur erzeugen, aber nicht unterdrücken. (da müßte man dann ja den eigentlichen Tastaturtreiber aushebeln, dort den Tastencode rausfiltern oder alles Andere über einen eigenen virtuellen treiber ans System weiterleiten) |
AW: Seltsames Verhalten NT-Service Komponente
Da man über die Registry alles abschalten kann, was beim drücken von Strg-Alt-Entf möglich ist, würde mich das schon gar nicht mehr interessieren diese Kombination abzufangen.
Ich habe es noch nicht ausprobiert, aber wenn alle Funktionen per Reg abgeschaltet sind, dann wäre eigentlich nur noch der Menüpunkt Abbrechen übrig. Ist Windows dann so intelligent und zeigt dann auch dieses Menü nicht an? Und wenn wäre es auch egal ... der User kann nichts machen, nur diesen einen Menüpunkt anstarren ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
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