![]() |
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
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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