Windows Dienst



  • Heieiei, nochma ganz von vorne:

    Ich will ein Programm schreiben, dass beim herunterfahren des PC-s ein script (*.bat) ausführen soll. da dieses script die registry ändern soll, soll das script als system process ablaufen, da die user nicht das recht haben, die registry zu ändern. ist sowas möglich?
    Ich hänge nur an der tatsache, dass bei mir das script als user process läuft...



  • welches Beriebsystem?



  • windof 2000 und xp

    kleine frage am rande: wie kann ich nen dinest debuggen?



  • in VS: Menü Debugen/Prozesse...

    aus der Prozessenliste dein Dienst auswählen, dann "Anfügen" klicken.
    im next'en Fenster beim Programmtyp "Common Language Runtime" anhacken und mit OK bestätigen.

    das prog muss natürlich in debugmodus erstellt werden.



  • ah, danke.
    jetzt fängt er events ab...
    jetzt noch ne kleine abschlussfrage:
    wenn der dienst installiert ist, kann ich im windows (xp) einstellen, dass der dienst interaktionen mit dem desktop machen kann. kann ich das so einstellen, das das nachm installieren automatisch schon der fall ist? Bei der ServiceBase klasse find ich dazu kein Property... (gibts wahrscheinlich auch ned) geht das auch irgendwie anders?

    Grüsse,

    Jojo



  • sieh dir mal die ServiceType-Eigenschaft von der ServiceController-Klasse an.



  • ah, cool, das habich gebraucht. vielen dank für deine mühe.

    Grüsse,

    Jojo



  • oh nein, heut is glaub nich mein tag:

    ServiceController service = new ServiceController( "ScriptService" );
    			service.ServiceType = ServiceType.InteractiveProcess;
    

    fehler: (57): Einer Eigenschaft oder einem Indexer 'System.ServiceProcess.ServiceController.ServiceType' kann nicht zugewiesen werden -- sie sind schreibgeschützt

    Wieso sind die auf einmal schreibgeschütz? Der Sinn des ServiceControlers liegt doch darin, Dienste zu manipulieren?!



  • Es ist doch auch nicht der ServiceController schreibgeschützt, sondern die Eigenschaft ServiceType. Diese Eigenschaft ist von Haus aus schreibgeschützt.



  • das hab ich ja gemerkt, aber ich wollte ja gerade diese eigenschaft des dienstes ändern...



  • habe gerade bei der Beschreibung von ServiceType-Enumeration rausgelesen:

    Die Erstellung interaktiver Dienste wird nicht unterstützt. Um dieses Problem zu umgehen, können Sie einen nicht interaktiven Dienst und eine separat gesteuerte grafische Benutzeroberflächenanwendung erstellen, die mit dem Dienst über Sockets oder Remoting kommuniziert.

    Da wird man noch auf die Remoting-Beispielseite verwiesen...



  • wenn du Probleme mit Remoting hast, kann ich dir sicher weiterhelfen 😉



  • Ja, das wär nett, aber ich versuchs erstmal selber.
    Jetzt muss ich erstmal zum Fussball spielen, danach wag ich mich da mal ran.
    Grüße, Jojo



  • ich hab ma drüber nachgedacht.
    mir erscheint das ein bisschen umständlich, dass ich ne seperate benutzeroberfläche bau, die ich dann irgendwie nach der installation automatisch starte, und die dann automatisch den ServiceType des Dienstes ändert ( mit remoting, oder wie auch immer ) und die sich dann selber schließt.
    ich versteh ned, dass wenn es schon eine klasse ServiceController gibt, wieso die dann nich direkt den Service manipulieren kann. 😕 😕 😕 😕



  • was hast du eigentlich vor.



  • ich will einfach nur nen dienst installieren, der datenaustausch mit dem desktop zulässt, ohne dass man nach der installation extra umständlich den dienst anklicken und auf eigenschaften gehen muss und dort diese einstellung zu ändern...



  • hm, ich bin mir ncoh nicht im klaren darüber, was du eigentlich vorhast. Was ist die eigentliche Aufgabe. ICh glaube, dass du dich an ein Problem festkeilst. 🙄



  • Ok, ich erklär mal die komplette Sachlage:
    Ich hab nen PC-Pool in ner Schule, mit 20 - 40 Rechnern.
    Ich hab nen Programm, mit dem ich auf allen Rechnern gleichzeitig etwas installieren kann. Ich hab einen Windows Dienst (der als System angemeldet ist, weil er in der Registry was ändern soll). Leider geht das manipulieren der Registry nur, wenn der ServiceType des Dienstes interaktiv ist. Jetzt will ich aber nicht nach der installation an jeden der 20 - 40 Rechner rennen, und die Eigenschaft "Datenaustausch mit Desktop zulassen" des Dienstes manuell auf true setzen. Deswegen versuch ich gerade krampfhaft dass dies automatisch nach der installation funktioniert...



  • ach, jetzt hat es klick gemacht 🙂

    Beschissene Situation.

    http://www.dotnet247.com/247reference/msgs/36/184247.aspx

    da unten ist ein Lösungsvorschlag. Hattest du den mal ausprobiert ?



  • Geil, das war genau das richtige.
    Man musste nur nen Wert in der Registy ändern, und schon hatte man einen "interaktiven" Dienst.

    Vielen Dank für deine Hilfe.

    Grüsse,

    Jojo


Anmelden zum Antworten