Windows Service Installieren - Programm schließt sich nicht!?



  • 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!


  • Mod

    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 EntryPoint

    void __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 😉


Anmelden zum Antworten