Berechtigungen Windows-Dienst



  • Hallo, ich habe ein Problem mit einem Windows-Dienst.
    Anscheinend liegt es an irgendwelchen Berechtigungen, denn
    wenn ich in meinem Programm:

    system("shutdown -s");
    

    aufrufe funktioniert es ohne Probleme, aber wenn ich:

    system("rundll32.exe user32.dll,SwapMouseButton");
    

    aufrufe, passiert gar nichts, aber es verhält sich so, als würde es funktionieren. (Keine Fehlermeldung)
    Das gleiche Problem tritt auch bei anderen Aufrufen auf.
    Wäre nett wenn mir jemand helfen könnte.



  • Nimm doch die API Function SwapMouseButton. Dann soltlest du mit GetLastError auch den Fehelr rausfinden können. 😉


  • Mod

    Man kann auch nicht mit rundll32 einfach jede beliebige API Funktion aufrufen!

    Ist zwar alt, stimmt aber in weiten teilen noch:
    https://support.microsoft.com/kb/164787



  • Martin Richter schrieb:

    Man kann auch nicht mit rundll32 einfach jede beliebige API Funktion aufrufen!

    Wenn man den Codeabschnitt den der TS gepostet hat aber per CMD oder system() auführt klappt es problemlos. Insofern ist die Frage warum es bei Diensten nicht klappt nachvollziehbar.



  • @DarkShadow44
    danke SwapMouseButton werde ich probieren, bin gerade noch mit einem anderen Teil der Anwendung beschäftigt.
    Ich gebe in ein paar Tagen bekannt obs funktioniert.



  • Dass es bei nem Service so ohne weiteres nicht klappt wird beim direkten Aufruf der Funktion SwapMouseButton nicht anders sein.

    Was daran liegt dass ein Service per Default nicht in der "interactive Session" ausgeführt wird, sondern in einer eigenen Session die nix mit dem interaktiven Desktop zu tun hat.
    D.h. SwapMouseButton würde dann für diese "Service Session" ausgeführt, und hätte damit auch nur Auswirkungen für die Window-Station des Services. Die eben nicht die des interaktiven Desktop ist.

    Wenn man mit nem Service Einfluss auf den interaktiven Desktop nehmen möchte, dann muss man das Service mit der "allow service to interact with desktop" Option konfigurieren (und dann natürlich nochmal neu starten).
    Die kann man im Properties Dialog des "Services" Control Panels einfach dazuklicken. Bzw. natürlich auch beim Installieren bereits irgendwie angeben - müsstest du dir ggf. selbst ergoogeln wie das geht.

    Wobei das Service dann auch nur Einfluss auf die sog. "Console Session" hat, also auf die Session wo man sich über die lokal angeschlossene Maus/Keyboard einloggen kann und das Bild über die eingebaute Grafikkarte ausgegeben wird. Auf Remote-Desktop Sessions kommt man damit auch nicht hin.

    Wenn man das braucht, bleibt nur noch ein zusätzliches Hilfsprogramm das man im Autostart einträgt, welches dann irgendwie mit dem Service kommuniziert, und die gewünschten Aktionen für das Service ausführt. Dieses Hilfsprogramm würde damm z.B. beim Login in jeder Session extra gestartet, wodurch man dann Einfluss auf sämtliche Sessions nehmen kann.



  • hustbaer schrieb:

    Dieses Hilfsprogramm würde damm z.B. beim Login in jeder Session extra gestartet, wodurch man dann Einfluss auf sämtliche Sessions nehmen kann.

    Wobei sich dann in diesem Fall die Frage stellt, wozu dann der Service überhaupt nocht benötigt wird :p


Anmelden zum Antworten