Windows Service Installieren - Programm schließt sich nicht!?
-
__username schrieb:
Ist ja eigentlich nur ein Usermode-Service, der brauch doch nicht signiert sein, oder?
Installieren/Deinstallieren kann ich den Service ja, alles okay, nur dass er nach dem Installieren weiter läuft, anstatt sich zu beenden, wie er sollte, das störtZeig mal Dein ganzer Code bitte.
-
Aber gerne
void main(void) { int i; LPWSTR* c = CommandLineToArgvW(GetCommandLine(), &i); if(i > 1) { if(wcscmp(c[1], L"install") == 0) // <- Debug Commandline { i(L"install"); InstallService(); return; } ... void InstallService() { SC_HANDLE serviceControlManager = OpenSCManager( 0, 0, SC_MANAGER_ALL_ACCESS ); // Kein Fehler GetLastError(); // 0 CloseServiceHandle( serviceControlManager ); // 1 bzw TRUE GetLastError(); // o return; ...
-
So installiert man auch kein Service! Da fehlt ne menge an Code!
-
Und was soll das in Zeile 9?
-
Mir ist klar, dass da noch Code fehlt, dieser ist aber für mein Problem nicht relevant.
Zeile 9 ist ne Debug ausgabe...
-
Du kannst den Service Manager mit vollen Rechten nur über Admin bekommen!
-
__username schrieb:
Admin bin ich sowieso, aber auch explizit als Admin starten hilft nicht.
-
Dann hast Du ein anderes Problem! Zeig mal den ganzen Code.. denn an dem kann es nicht liegen!
-
Also wenn Dein Programm hängt, dann klick auf "Break All" und schau den Callstack an.
Wo steht Deine Software. Was macht sie in dem Moment?
-
Gute Idee, jetzt steckt der Code im sichtbare Bereich fest, vorher konnte ich den Debugger nicht sehen, seltsam, egal!
Debugger
NtWaitForMultipleObjects: 0000000076DC18C0 4C 8B D1 mov r10,rcx 0000000076DC18C3 B8 58 00 00 00 mov eax,58h 0000000076DC18C8 0F 05 syscall 0000000076DC18CA C3 ret // hier hängen wir... 0000000076DC18CB 0F 1F 44 00 00 nop dword ptr [rax+rax]
Callstack
ntdll.dll!NtWaitForMultipleObjects() // hier hängen wir... ntdll.dll!TppWaiterpThread() kernel32.dll!BaseThreadInitThunk() ntdll.dll!RtlUserThreadStart()
Das sieht ja so aus, als wäre das ServiceManager-Object noch in Verwendung...
MSDN sagt:CloseServiceHandle:
hSCObject [in]
A handle to the service control manager object or the service object to close. Handles to service control manager objects are returned by the OpenSCManager function, and handles to service objects are returned by either the OpenService or CreateService function.Edit:
Kann es sein, dass CloseServiceHandle einen Thread erstellt, der auf das Object "wartet" und der Prozess somit nicht beendet werden kann?
-
So hab´s endlich, man sucht doch immer tiefer als das Problem eigentlich liegt...
Lag daran, dass ich als EntryPointvoid __stdcall main(void)
festgelegt habe. Regulär müsste es ja
int __stdcall wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
heißen, aber ich dachte, das würde auch so funktionieren...das tut es aber anscheinend nicht
-
Wie bitte? Also bei mir funktioniert es auch mit int main(void).
Dein Problem ist wohl ein anderes. Hatte auch mal so ein Problem, bei dem ich einfach mal ein Kompletes clean und danach ein rebuild durchgefûhrt habe... dannach hatte ich diesen komischen effekt nicht mehr! Bei mir blieb er auch immer an bestimmter Stelle hängen....
-
Hatte ich alles gemacht, half aber nichts