AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dienst installieren + unter anderen Benutzerdaten starten
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst installieren + unter anderen Benutzerdaten starten

Ein Thema von Stephan · begonnen am 11. Jul 2007 · letzter Beitrag vom 18. Sep 2008
Antwort Antwort
Seite 2 von 2     12   
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#11

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 17. Sep 2008, 13:21
Zitat von Schwedenbitter:
Aber es hat auch den Vorteil, ohne zutun als angemeldeter Benutzer zu laufen...
Aber leider halt auch nur wenn ein Benutzer auch angemeldet ist, nicht wenn niemand angemeldet ist!
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 17. Sep 2008, 13:27
Zitat von dfried:
Aber leider halt auch nur wenn ein Benutzer auch angemeldet ist, nicht wenn niemand angemeldet ist!
Das ist OK!
Ich hatte bereits geschrieben, dass mein Programm auf Benutzereingaben angewiesen ist. Ich möchte ständig ein Verzeichnis auf Dateien prüfen. Sind welche da, kommt ein Fenster, dass dem Benutzer das Sortieren und ablegen ermöglicht. Anschließend wird es wieder geschlossen.
Ohne angemeldeten Benutzer ist das sinnlos. Ich fand es nur unter dem Gesichtspunkt "dümmster anzunehmender User" gut, dass man an Diensten nicht so leicht manipulieren kann und den meisten Benutzern der Schalter /uninstall zum Deinstallieren doch nicht bekannt ist.
Alex Winzer
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#13

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 17. Sep 2008, 13:41
Hallo,

unter Deinem letzten Gesichtpunkt:

Wenn der Dienst nur laufen soll, wenn ein Benutzer angemeldet ist und mit dessen Rechten, dann installiere den Dienst wie gehabt und starte ihn (per Batch?) über den Run-Zweig mit net start meindienst.
Wenn Du den Run-Zweig von Local-Machine nimmst, startet der Dienst bei jedem Benutzer und den Zweig kann nicht jeder Benutzer manipulieren (wenn die Rechte stimmen).
Wenn der Dienst dann einmal läuft, dann läuft er auch bei abgemeldetem Benutzer weiter, bis zum Runterfahren des Systems.

Stephan

PS: Drei Sätze und alle fangen mit Wenn an, das ist jetzt aber keine stilistische Glanzleistung
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 17. Sep 2008, 14:13
Zitat von nahpets:
Wenn der Dienst nur laufen soll, wenn ein Benutzer angemeldet ist und mit dessen Rechten, dann installiere den Dienst wie gehabt und starte ihn (per Batch?) über den Run-Zweig mit net start meindienst.
Ich muss leider gestehen, dass ich das verstehe, aber nicht weiß, wie ich es anstellen soll. Die Dienste werden doch über Einträge in der Registry gesteuert vom BS gestartet, oder? Was soll ich da mit einer Batch?

Zitat von nahpets:
Wenn Du den Run-Zweig von Local-Machine nimmst, startet der Dienst bei jedem Benutzer und den Zweig kann nicht jeder Benutzer manipulieren (wenn die Rechte stimmen).
Das ist genau das, was ich will. Laufen und nicht ändern können. Der Dienst ist für mein Software-Paket notwendig. Zumindest solange man mit Delphi keine Drucker-Treiber selbst schreiben kann

Zitat von nahpets:
Wenn der Dienst dann einmal läuft, dann läuft er auch bei abgemeldetem Benutzer weiter, bis zum Runterfahren des Systems.
Das werde ich mla probieren. Dann bleibt mir nur der Trick, meinen "Dienst" nur einmal startbar zu machen. Wenn er weiter läuft, ist es nicht schlimm. Denn ohne Benutzerinteraktion macht er ja nichts.

Alex

P.S. Das mit den 3 "Wenn(s)" ist OK. Ich will was lernen. Aber ganz bestimmt nicht Deutsch. Das wäre dann das falsche Forum.
Alex Winzer
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 17. Sep 2008, 14:29
Hallo,

auf der Kommandozeile kannst Du Dienste auch von "Hand" starten.
net start deindienstname startet Deinen Dienst.
net stop deindienstname beendet ihn wieder.

Dienste über die Registierung zu starten ist ein Weg, aber nicht der Einzige. Es ginge auch über die Windows-API.

Wenn ich Dienste entwickle, dann teste ich immer über 'ne Batch, geht einfach schneller als über die Systemsteuerung. Im Batch kann ich halt vorher auch noch Dateien an die entsprechenden Stellen kopieren oder das install bzw. das uninstall mit aufnehmen. Bin da halt faul.

Neben dem Run-Zweig wäre auch die Autostart noch eine Option.

Deine Batchdatei, die Du im RUN-Zweig aufrufst, muss nur
net start Dienstname enthalten, eventuell reicht in der Registrieung aber auch sowas:

"MeinenDienstStarten"="net start MeinDienst" Einfach mal ausprobieren, einer der beiden Wege sollte für Deinen Bedarf ausreichen.

Stephan
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#16

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 17. Sep 2008, 15:30
Hallo,

mir fällt da gerade noch was ein:

Parallel zu Run gibt es auch noch RunServices. Der funktioniert auch ohne Benutzeranmeldung (aber da fehlt Dir dann wohl die passende Anmeldung).

http://support.microsoft.com/kb/179365/de

Stephan
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
177 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Dienst installieren + unter anderen Benutzerdaten starte

  Alt 18. Sep 2008, 14:28
Du kannst dem Service die Parameter für die Kontendaten (Login/Pass) wie nachfolgend im Beispiel aufgeführt übergeben.
Weiss grad nicht, ob der Dienst dazu gestoppt sein muss, ich verwende diese Routine zum Setzen der Werte kurz nach der
eigentlichen Installation. Die Kontenangaben müssen einem gültigen Konto entsprechen.

Delphi-Quellcode:
function ServiceSetLoginPass(const Service, Login, Pass, MachineName:pchar):integer; stdcall;
var
  SCMH : SC_HANDLE;
  SVCH : CARDINAL;
begin
  Result := 0;
  if (StrLen(Service) <> 0) then begin
    if (MachineName=nil) or (StrLen(MachineName)=0) then
      SCMH := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT or GENERIC_READ)
    else SCMH := OpenSCManager(MachineName, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT or GENERIC_READ);

    if SCMH <> 0 then begin
      SVCH := OpenService(SCMH , Service, SERVICE_CHANGE_CONFIG);
      if SVCH <> 0 then begin
        if ChangeServiceConfig(SVCH , SERVICE_WIN32_OWN_PROCESS (*SERVICE_NO_CHANGE*), SERVICE_NO_CHANGE, SERVICE_NO_CHANGE,
            nil, nil, nil, nil, Login, Pass, nil) then
          Result := 1;
        CloseServiceHandle(SVCH );
      end;
      CloseServiceHandle(SCMH );
    end;
  end;
end;
Gruss Gremlin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz