Announcement

Collapse
No announcement yet.

Register Service Application unter NT am Benutzer vorbei.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Register Service Application unter NT am Benutzer vorbei.

    Hallo,

    ich weiß wie man unter 9x eine Service-Anwendung registriert. Das Problem ist nur, dass das ganze bei NT ja ganz anders aussieht. Nun möchte ich aber meine Anwendung als Service Anwendung unter NT registrieren lassen, damit dieses lästige Gefusel im Taskmanager weg ist. Außerdem möchte ich den Benutzer nicht mit lästigen Sicherheitsabfragen quälen. Also sozusagen eine Registrierung "am Benutzer vorbei". Ich habe auch in dem Buch "Win32Lösungen" nachgeschaut, aber irgendwie steige ich da nicht durch.

  • #2
    Windows Services sind ein eigener Anwendungstyp, sie müssen ebenso wie Anwendungen mit Fenstern im graphischen Win32-Subsystem auf Nachrichten reagieren, die sie gesendet bekommen.<br>
    Services haben sich aber nach anderen (strengeren?) Regeln zu verhalten.<br>
    Es gibt (wie bei "Fenster-Anwendungen" WinMain) eine Funktion, die aller Steuerungsnachrichten empfängt und beantworten muß.<br>
    Du kannst Dir es so vorstellen, daß ein Service nichts anderes ist ein Thread mit integrierter Fernsteurung (Starten, Anhalten, Forsetzen, Beenden, etc).<br>
    Services haben den großen Vorteil, daß sie unter einem bestimmten Account ausgeführt werden können. Dadurch haben sie Zugriff auf Daten und Möglichkeiten, die der angemeldete Benutzer-Account eventuell nicht hat. Die meisten Services werden unter dem "System-Account" ausgeführt.<br>
    Normalerweise werden Services in einem eigenen Desktop ausgeführt (hat seine Gründe; um den Service aber auch die Benutzeranwendungen zu schützen).<br>
    Man kann einem Services aber auch das Flag (man kann vieles einstellen =) "interaktiv" mitgeben, dann hat der Service Zugriff auf den "aktiven" Desktop (WinSta0\Default).<br>
    http://support.microsoft.com/support/kb/articles/Q171/8/90.ASP

    Services werden vom Service Control Manager (SCM) gesteuert und verwaltet (vom SCM werden auch Treiber verwaltet, diese haben aber andere Flags und werden für den Windows-Benutzer getrennt dargestellt).<br>
    Dafür gibt es auch eine eigene API, die nicht unbedingt klein ist (aber sonderlich groß fällt sie auch nicht aus, da es ja nicht soviel zu wollen gibt bei einer so allgemeinen Schnittstelle wie dem SCM).<br>
    http://msdn.microsoft.com/library/en-us/dllproc/hh/winbase/services_0p0z.asp

    Ein letztes Wort zu Services; sie laufen nicht auf Windows 95/98/ME, nebenbei bemerkt gibt es dort keine Services (was dort so genannt wird sind nur versteckte Anwendungen, alles andere sind Treiber).<br>
    Ich habe bereits kleine Services gesehen, die in mühevoller Handarbeit geschrieben wurden und auf beiden Systemen laufen, das Problem dabei ist einfach, das man die gesamte API für die Services dynamisch laden muß und in der WinMain eine ziemlich große und komplexe Abfrage hat, warum und in welchem Kontext die Anwendung diesmal aufgerufen wurde, damit sie sich unter 9x und NT richtig verhält. Dies ist aber nicht unbedingt erstrebenswert, da es nur in Arbeit ausartet, aber als Übung sicherlich ganz nett, wenn man zuviel Zeit hat =)

    Gruß Nic

    Comment


    • #3
      Hallo,
      Danke NicoDE.
      Was die Zeit betrifft: Ich hab' zwar genügend, aber sooo viel auch wieder nicht! Ich habe mir die Links (s.o.) mal angeschaut. Recht interessant. Die Anwendung soll in etwa so arbeiten wie Services unter 9x (Kein Eintrag im TaskM.,usf.). Ich bin auf dem Gebiet NT nicht besonders bewandelt (deshalbt frage ich ja auch soviel) und ich weiß auch nicht wie/wo ich dieses Problem anpacken soll. Ich muss dann erstmal den ganzen Code von C++ übersetzen. Also für weitere Tipps bin ich dankbar

      Comment


      • #4
        Ich bin ab Sonntag in anderen Umständen (nein nicht schwanger *g*).<br>
        Aber ich bin sicher, daß sich in diesem kompetenten Forum jemand findet, der Deine Fragen beantworten wird.<br>

        Zu Deinem Wunsch,,, unter Windows NT gibt es einen "richtigen" TaskManager, der _jeden_ Prozeß anzeigt (Services können aber nichtmal von Admins über den TM beendet werden, dafür gibt's ja den SCM).

        Und über die Portierung brauchst Du Dir keine Sorgen machen. Delphi (ich gehe von 5 Prof aus) hat eine Vorlage für Serivices, sowie grundlegende Units (wie die WinSvc.pas), die Deinen Ansprüchen genügen sollten.<br>
        Mit oben genannter Vorlage ist es ein Kindespiel einen Service zu schreiben.<br>
        (vorausgesetz, man hat begriffen, wie sie funktionieren , deswegen habe ich den Link zu MSDN gepostet, da es wesentlich umfangreicher als die Delphi-Hilfe in dieser Beziehung ist)

        Alles andere findest Du dank der Arbeit von fleißigen Delphi-Entwicklern unter GPL auf http://www.delphi-jedi.com aber das wird sicher nicht nötig sein...

        Viel erfolg mit der Entwicklung für Windows NT, es ist ein interessantes Betriebsystem, das wenn man seine Vorzüge erkannt hat schnell dazu verleitet, 9x nur noch zum Spielen zu benutzen =)

        Man schreibt sich, Gruß Nic

        Comment


        • #5
          Hallo NicoDE,

          Ich wünsche dir viel Glück bei deiner Schwangerschaft. Ich werde wohl mal ein bischen ausprobieren bei NT. Was Spiele angeht : Die funktionieren doch auch unter WinNT super oder nicht? Ich hoffe, dass sich ein zeitlicher Ersatz für dich finden lästt . Aber du bist doch nicht zuuu lange weg

          Comment


          • #6
            Hallo,

            ich wußte ja gar nicht, dass es so einfach ist. Ich hab's erst heute, bemerkt. Delphi stellt ja bereits einen Experten zum erstellen von Service-Applications bereit. Damit gibts ja wirklich nichts einfaches

            Comment


            • #7
              Kein Problem, ich schau ab-und-zu mal rein, =)

              Gruß Nic

              Comment

              Working...
              X