![]() |
NT-Service auf 64bit Windows
Hallo,
ich habe einen NT-Service programmiert und mache damit das da:
Delphi-Quellcode:
Unter Windows X86 funktioniert das einwandfrei, mit Windows 64Bit scheint es nicht mehr zu funktionieren (habe nur zeitweise eine Testumgebung).
ZeroMemory( @si, sizeof(si) );
si.lpDesktop := PChar('WinSta0\Default'); si.cb := sizeof(si); ZeroMemory( @pi, sizeof(pi) ); ReadDir(PW); command:=PW+'\remote.exe'; try if not CreateProcessAsUser( token, nil, PChar(command), nil, nil, False, CREATE_NEW_CONSOLE, //cf, nil, PChar(ExtractFilePath(command)), si, pi )then exit; except exit; end; Was muss ich machen damit es auch mit Windows 64Bit funktioniert ? KUBA |
AW: NT-Service auf 64bit Windows
Wo scheitert es denn?
|
AW: NT-Service auf 64bit Windows
remote.exe startet nicht, taucht nicht im Taskmanager auf.
ups, ich sehe gerade dass ich den falschen Auszug gepostet habe: So sieht's aus:
Delphi-Quellcode:
Also shellexecute tuts bei 64Bit nicht, warum ?
ReadDir(PW3);
ShellExecute(0,Nil,'remote.exe','',PCHar(PW3), SW_HIDE); kuba |
AW: NT-Service auf 64bit Windows
Ich entwickle hier mir Server2008R2 und hatte noch nie Probleme mit Shellaufrufen.
Ist remote.exe im Suchpfad? |
AW: NT-Service auf 64bit Windows
Zitat:
Dieser Code scheint auch Probleme zu machen:
Delphi-Quellcode:
Meinst du mit Suchpfad PATH ? Ich starte das Programm doch mit Pfadangabe, oder könnte es an den Rechten des Programmverzeichnis liegen ? Der Dienst als solcher funktioniert einwandfrei, nur die Programme starten nicht in der 64Bit Umgebung.
ReadDir(PW1);
PW2 := 'watchdog.exe'; PW3 := ''; try CmdLine := Format('"%s%s" %s',[IncludeTrailingPathDelimiter(PW1),PW2,PW3]); FillChar(SI, SizeOf(SI), #0); FillChar(PI, SizeOf(PI), #0); SI.cb := SizeOf(SI); SI.lpDesktop := PChar('Winsta0\Default'); SI.dwFlags := STARTF_USESHOWWINDOW; SI.wShowWindow := SW_SHOWDEFAULT; ProcCreated := CreateProcessAsUser( hUserToken, nil, PChar(CmdLine), // pointer to command line string nil, // pointer to process security attributes nil, // pointer to thread security attributes True, // handle inheritance 0, // creation flags nil, // pointer to new environment block nil, // pointer to current directory name SI, // STARTUPINFO PI); // PROCESS_INFORMATION if ProcCreated then begin CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end else ShowMessage('Error ' + SysErrorMessage(GetLastError)); finally CloseHandle(hUserToken); end; Ich installiere den Service mit einem Setup (InnoSetup), folgende Zeile habe ich eingefügt damit ich im Programmverzeichnis auf ini-Dateien zugreifen kann:
Delphi-Quellcode:
[Dirs]
Name: "{app}"; Permissions: authusers-full; Muss ich bei Windows 64Bit irgendwelche Verzeichnisrechte setzten ? kuba |
AW: NT-Service auf 64bit Windows
Das ShowMessage wirst du nie sehen, da es ab Windows Vista keine interaktiven Dienste mehr gibt. Schreib besser eine Logdatei.
Den Remarks Abschnitt im Windows SDK hast du gelesen? |
AW: NT-Service auf 64bit Windows
Zitat:
Remarks Abschnitt ?? Hab ich nicht gelesen, wo ??? kuba |
AW: NT-Service auf 64bit Windows
Zitat:
Zitat:
|
AW: NT-Service auf 64bit Windows
Zitat:
![]() Solange mir meine Testumgebung nicht zur Verfügung steht kann ich wohl nur mutmaßen. kuba |
AW: NT-Service auf 64bit Windows
|
AW: NT-Service auf 64bit Windows
Zitat:
Kann ich im Moment leider nicht testen... kuba |
AW: NT-Service auf 64bit Windows
Nicht nur das. Ich meine auch alles andere. Du musst eben gucken, was bei dir zutreffen könnte.
|
AW: NT-Service auf 64bit Windows
Zitat:
heute honnte ich ein paar Tests machen, also ShellExecute funktioniert ohne Probleme. Aber bei CreateProcessAsUser scheitert es. Im Moment habe ich noch keine Idee woran es liegen könnte. kuba |
AW: NT-Service auf 64bit Windows
Hy,
heute konnte ich noch ein paar Versuche machen. Es gibt anscheinend Probleme mit dem UserToken. Wenn ich CreateProcessAsUser verwende dann startet das Programm nicht wie gewünscht auf dem Desktop des angemeldeten Benutzers sondern in Session 0. Ich erhalte also die Meldung "Erkennung interaktiver Dienste". Sonst konnte ich noch nichts weiter herausfinden... kuba |
AW: NT-Service auf 64bit Windows
Zitat:
|
AW: NT-Service auf 64bit Windows
Zitat:
Das kann man so nicht einfach stehen lassen. Es ist nur nicht mehr so einfach wie zuvor. Folgende Schritte sind (im groben) nötig. ![]() ![]() ![]() ![]() ![]() Am Ende nicht vergessen die Tokens und Environment wieder freizugeben. So ist es weiterhin möglich aus einem Dienst welcher im System Kontext läuft Z.B. einen Prozess im User Kontext zu erzeugen. Gruss Werner |
AW: NT-Service auf 64bit Windows
Zitat:
Ach ja: Gibts das als fertigen Delphi-Code den man in die CodeLib aufnehmen könnte :?: :zwinker: |
AW: NT-Service auf 64bit Windows
Zitat:
![]() kuba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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 by Thomas Breitkreuz