![]() |
Dienst Windows XP - Windows Server 2003 R2
Hallo zusammen,
meinen Dienst habe ich fertig programmiert und unter Windows XP macht er auch alles, was ich mir von meinem Dienst gewünscht habe. Der Dienst soll jedoch auch unter Windows Server 2003 R2 laufen. Die Installtion verläuft erflogreich, jedoch reagiert der Dienst auf keine weiteren Aktionen in gewünschter Weise. Gibt es grundsätzliche Unterschiede die man beachten muss zwischen einem Dienst unter XP und unter Server 2003 R2? Danke im Vorraus. |
AW: Dienst Windows XP - Windows Server 2003 R2
Was soll er denn tun ...
Was benötigt er für Treiber, Komponenten, Rechte ... |
AW: Dienst Windows XP - Windows Server 2003 R2
Hm, wie wäre es, wenn du uns mit etwas mehr Informationen versorgst, was dein Dienst macht, was er für Resspurcen nutzt etc?
|
AW: Dienst Windows XP - Windows Server 2003 R2
Hi,
die Beschreibung des Dienstes befindet sich in diesem Thread. ![]() Der Dienst wartet nach dem Start darauf, dass durch das Ausführen eines Batch Files eine Textdatei erzeugt wird, die einen Pfad zu einem XML-File beinhaltet, erscheint. Der String wird eingelesen und die Datei anschließend gelöscht. Unter Windows XP hat der Dienst kein Problem damit. |
AW: Dienst Windows XP - Windows Server 2003 R2
Zitat:
|
AW: Dienst Windows XP - Windows Server 2003 R2
Zitat:
Der Dienst läuft unter dem Lokalen System. |
AW: Dienst Windows XP - Windows Server 2003 R2
Local System hat, so weit ich weiß, keinen Zugriff auf das Netzwerk.
|
AW: Dienst Windows XP - Windows Server 2003 R2
Ok. Ich hab jetzt die Daten auf das D-Laufwerk des Servers gelegt. Die Daten liest bzw. schreibt er soweit. Meinen Prozess startet er leider nicht.
Ich habe mir mal ein Logfile angelegt um zu schauen ob er wirklich irgendwas macht oder ob er irgendwo hängen bleibt. Der Prozess müsste eigentlich gestartet sein, da im Logbuch der Verweis auf eine zugeordnete ProzessID hinterlegt wurde. Wie gesagt auf Windows XP macht mein Dienst alles was verlangt wird. Gibt es einige Parameter beim CreateProcessAsUser, die ich beachten muss? Wäre sehr nett, wenn jemand eine Idee bzw. einen Ansatz für mich hat. Danke |
AW: Dienst Windows XP - Windows Server 2003 R2
Lies Dir mal
![]() |
AW: Dienst Windows XP - Windows Server 2003 R2
Danke für den Verweis. Um die Adminrechte des gestarteten Prozess geht es mir in diesem Fall nicht. Der Dienst ist sehr ähnlich wie der beschriebene Dienst aufgebaut. Ich habe auch mit der Version von Zacherl gearbeitet (also ohne JEDI units).
Hier ist nochmal der Quellcode:
Code:
function OpenShellProcessToken(ProcessName: String;
var hToken: THandle): Boolean; var hSnapshot, hProcess: THandle; Process: TProcessEntry32; begin Result := false; hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot <> 0) and (hSnapshot <> INVALID_HANDLE_VALUE) then try FillChar(Process, SizeOf(Process), #0); Process.dwSize := SizeOf(Process); if Process32First(hSnapshot, Process) then repeat if (AnsiLowerCase(Process.szExeFile) = AnsiLowerCase(ProcessName)) then begin hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, Process.th32ProcessID); if (hProcess <> 0) and (hProcess <> INVALID_HANDLE_VALUE) then try Result := OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, hToken); finally CloseHandle(hProcess); end; Break; end; until (not Process32Next(hSnapshot, Process)); finally CloseHandle(hSnapshot); end; end; function CreateProcessElevated(lpApplicationName: PChar; lpCommandLine: String; lpCurrentDirectory: PChar;Counter: Integer; var ProcessInfo: TProcessInformation): Boolean; var WTSGetActiveConsoleSessionId: function: DWord; stdcall; WTSQueryUserToken: function(SessionId: ULONG; var phToken: THandle): BOOL; stdcall; CreateEnvironmentBlock: function(lpEnvironment: PPointer; hToken: THandle; bInherit: BOOL): BOOL; stdcall; DestroyEnvironmentBlock: function(lpEnvironment: PPointer): BOOL; stdcall; var hUserToken, hLinkedToken, hElevatedToken: THandle; ReturnLength, ElevationType: DWord; Environment: Pointer; StartupInfo: TStartupInfo; begin Result := false; @CreateEnvironmentBlock := GetProcAddress(LoadLibrary('userenv.dll'), 'CreateEnvironmentBlock'); @DestroyEnvironmentBlock := GetProcAddress(LoadLibrary('userenv.dll'), 'DestroyEnvironmentBlock'); if (not Assigned(CreateEnvironmentBlock)) or (not Assigned(DestroyEnvironmentBlock)) then Exit; @WTSGetActiveConsoleSessionId := GetProcAddress(LoadLibrary('kernel32.dll'), 'WTSGetActiveConsoleSessionId'); @WTSQueryUserToken := GetProcAddress(LoadLibrary('wtsapi32.dll'), 'WTSQueryUserToken'); begin Result := OpenShellProcessToken('explorer.exe', hUserToken); if Result then try begin begin hElevatedToken := hUserToken; end; try if CreateEnvironmentBlock(@Environment, hElevatedToken, false) then try FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); uniqueString(lpcommandline); Result := CreateProcessAsUser(hElevatedToken, lpApplicationName, PChar(lpCommandLine), nil, nil, false, CREATE_NEW_CONSOLE or CREATE_DEFAULT_ERROR_MODE or CREATE_UNICODE_ENVIRONMENT, Environment, lpCurrentDirectory, StartupInfo, ProcessInfo); //Kernzuweisung SetProcessAffinityMask(ProcessInfo.hProcess, counter+1); finally DestroyEnvironmentBlock(Environment); end; finally CloseHandle(hElevatedToken); end; end; finally Windows.FindClose(hUserToken); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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