Announcement

Collapse
No announcement yet.

services / sockets

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

  • services / sockets

    ich schreibe gerade meine eigene c/s anwendung mit d5pro. damit kann ich wunderbar services für nt programmieren, doch sollte der server auch unter 9x laufen. am besten wäre es, wenn ich eine normale w32 anwendung schreibe, die aber auch als service lauffähig ist (kommandozeilenparameter o.ä. [z.b. wie der interbase server]). ist das mit den borland-komponenten überhaupt möglich (wegen TApplication) ? vielleicht über eine dll ?

    schon mal danke
    andre

  • #2
    Hallo,

    obwohl die reinrassigen Dienste nur unter Windows NT zur Verfügung stehen, gibt es auch unter Windows 9x Service-Anwendungen (die nicht vom Benutzer über den Task-Manager geschlossen werden können). Ein Beispiel dafür ist in meinem Buch <b>Delphi Win32-Lösungen</b> zu finden. Normalerweise wird eine TBNA-Anwendung erstellt und anschliessend über die API-Funktion <b>RegisterServiceProcess</b> unter Windows 9x als "Dienst" angemeldet. Über den passenden Registry-Zweig <b>RunServices</b> kann das Teil dann sofort beim Start noch vor der Benutzeranmeldung aktiviert werden.

    P.S: Ein Beispiel für eine Hybrid-Anwendung (sowohl NT-Dienst als auch Win32-Anwendung) liefert Borland zusammen mit Delphi im Projekt <b>scktsrvr.dpr</b> (zu finden im Source\VCL-Verzeichnis) aus.
    &#10

    Comment


    • #3
      erstmal danke für die antwort, aber das beispielprojekt konnte ich nicht finden (besitzte d5pro de)...

      jetzt wo sie es sagen: den zweig runservices(once) kenne ich, aber wenn ich einen ganz normales service programmiere - ist dieser dann vollwertig unter 9x lauffähig ? also "service.exe /install" der sich VOR der anmeldung (egal weche platform) startet ?

      andr

      Comment


      • #4
        Hallo,

        nein - ein richtiger NT-Dienst kann unter Windows 9x nicht zur Mitarbeit bewegt werden

        Comment


        • #5
          um nochmal drauf zurückzukommen:

          - der begriff TBNA ist mir neu und ich konnte auch sonst keine informationen darüber finden. ist auch nicht das, was ich brauche; ich möchte einen server programmieren, der unter nt als service laufen kann, und unter 9x als anwendung (nach dessen anmeldung reicht aus!)

          - ich habe das platform sdk jan2000 - aber keine spur von RegisterServiceProcess! es gibt lediglich RegisterServiceCtrlHandler(Ex), um einen NT-Service einzurichten. ist logischerweise nur bei NT(2000) integriert.

          - über Hybrid anwendungen konnte ich auch nichts finden

          - wie wäre ein programmiertechnischer ansatz für solch eine lösung ? ist das mit den borlandklassen überhaupt möglich? wenn ich 'SvcMgr' und 'Controls' einbinde, wird 'Application' überschrieben! ich dachte daran, die serverfuktionalität in eine dll/bpl zu exportieren und dann zwei projekte (service- & w32-anwendung) zu erstellen, die beide darauf aufbauen... trotzdem 2 exe-dateien + 1 dll (

          andr

          Comment


          • #6
            Hallo,

            zu Frage 1: <br>
            Mit <b>TBNA</b> ist der MS-Begriff <i>Taskbar Notification Area</i> gemeint. Das Programmicon wird im Bereich links neben der Urzeit angezeigt, aber nicht mehr in der Taskbar.

            zu Frage 2: <br>
            Im <i>Platform SDK</i> ist die API-Funktion <b>RegisterServiceProcess</b> über die Registerseite <b>Index</b> zu finden (steht nach RegisterServiceCtrlHandlerEx und vor RegisterSwitchProc).

            zu Frage 3: <br>
            Das ist kein MS-Begriff ;-)

            zu Frage 4: <br>
            Beim Delphi-Beispiel <b>Socket-Server</b> sieht das folgendermassen aus:
            <pre>

            {************************************************* ******}
            { }
            { Borland Delphi Visual Component Library }
            { Borland Socket Server source code }
            { }
            { Copyright (c) 1997,99 Inprise Corporation }
            { }
            {************************************************* ******}

            program ScktSrvr;

            uses
            SvcMgr, Forms, Windows, SysUtils, WinSvc, ScktCnst,
            ScktMain in 'ScktMain.pas' {SocketForm};

            {$R *.RES}

            function Installing: Boolean;
            begin
            Result := FindCmdLineSwitch('INSTALL',['-','\','/'], True) or
            FindCmdLineSwitch('UNINSTALL',['-','\','/'], True);
            end;

            function StartService: Boolean;
            ...
            begin
            Result := False;
            Mgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
            ...
            Svc := OpenService(Mgr, PChar(SServiceName), SERVICE_ALL_ACCESS...
            ...
            end;

            begin
            if not Installing then
            begin
            CreateMutex(nil, True, 'SCKTSRVR');
            if GetLastError = ERROR_ALREADY_EXISTS then
            begin
            MessageBox(0, PChar(SAlreadyRunning), SApplicationName, MB_ICONERROR);
            Halt;
            end;
            end;
            if Installing or StartService then
            begin
            SvcMgr.Application.Initialize;
            SocketService := TSocketService.CreateNew(SvcMgr.Application, 0);
            SvcMgr.Application.CreateForm(TSocketForm, SocketForm);
            SvcMgr.Application.Run;
            end else
            begin
            Forms.Application.ShowMainForm := False;
            Forms.Application.Initialize;
            Forms.Application.CreateForm(TSocketForm, SocketForm);
            SocketForm.Initialize(False);
            Forms.Application.Run;
            end;
            end.
            </pre&gt

            Comment


            • #7
              Hallo Andreas,

              hat die Verwendung einer solchen Hybrid-Applikation irgendwelche Nachteile oder Nebenwirkungen?

              Evtl. werd ich mal probieren, mein Problem mit NT-Dienst und DCOM-Server damit mal nachzustellen!

              Ach ja, kannst Du mir evtl. die gesammte Projektdatei senden. Ich hab leider nur D4/5 Professional! (mailto:[email protected]

              Comment


              • #8
                danke - werde ich die tage gleich mal ausprobieren...

                ps: aber application wird trotzdem 2x initialisiert, oder

                Comment

                Working...
                X