Results 1 to 14 of 14

Thread: Auto start NT service Windows 7

  1. #1

    Auto start NT service Windows 7

    Ik heb een Windows Service (NT Service) gemaakt (met Delphi 2007) en een hulpmiddel om het te installeren. De service start na installatie.
    Dat gaat onder Windows 7 goed, het hulp programma moet worden uitgevoerd als Admin.
    Na installatie start de service netjes. Ook via services.msc is de service te zien, met de juiste benaming etc. Bij “Startup type” staat netjes “automatic”. Tab “Log on” vermeld “local system account” (interaction met desktop staat uit).
    Maar na herstart van het systeem wordt deze service niet gestart. Wat doe ik fout?
    Andere service maken, speciaal voor Windows 7?
    Ik heb wel eens een vaag verhaal gehoord dat Win 7 niet automatisch services start na aanzetten om zo “spionage software” te voorkomen, immers anders zou een toetsenbord afvanger de inloggegevens kunnen onderscheppen.
    Kan Win 7 een service automatisch starten zonder dat iemand inlogt?
    Zo ja, hoe???
    Ik hoor graag.
    Anton

  2. #2
    Quote Originally Posted by fuchsia View Post
    Bij “Startup type” staat netjes “automatic”. Tab “Log on” vermeld “local system account” (interaction met desktop staat uit).
    Maar na herstart van het systeem wordt deze service niet gestart. Wat doe ik fout?
    Wat krijg je rond die tijd te zien in je event-logs?
    Waarschijnlijk krijg je daar wel een melding met een reden waarom je service niet gestart is.

  3. #3
    Het event-log meldt dit na opstarten:

    A timeout was reached (30000 milliseconds) while waiting for the X service service to connect

    en dit in een bericht gelijk er na:

    The X service service failed to start due to the following error:
    The service did not respond to the start or control request in a timely fashion.



    Na handmatig starten via services.msc:
    The X service service entered the running state.


    Kennelijk duurt het automatisch starten van de service voor "het systeem" te lang, want handmatig gaat het wel goed.
    Moet de wachttijd tijd om de service te starten misschien langer?
    Is dat aan te passen? Zo ja, hoe doe je dat? Opgeven tijdens installatie van de service?

  4. #4
    In aanvulling daarop: misschien is je service afhankelijk van een andere service die nog niet is gestart? Als je meteen bij de start probeert je database aan te spreken kan het zomaar zijn dat die nog niet is gestart. Dus in de start van een service moet je eigenlijk nog niet teveel doen. Zet een timer en start je echte werk pas als die verloopt. Als het fout gaat log / mail je de fout zodat je weet waarom het fout gaat. Verder kun je met de sc commandline ook dependencies instellen van je service, je service wordt dan pas gestart als die andere services er al zijn.
    Marcel

  5. #5
    Quote Originally Posted by Marcel View Post
    In aanvulling daarop: misschien is je service afhankelijk van een andere service die nog niet is gestart?
    Ja, dat zou mijn volgende suggestie geweest zijn

    I.p.v. zelf een timer te gebruiken kun je ook de service op Automatic (Delayed start) zetten. Dan wordt je service pas na 2 minuten (instelbaar in het registry) gestart.

    De dependencies instellen zou inderdaad ook een optie kunnen zijn. Je moet dan natuurlijk wel even uitvogelen van welke service je afhankelijk bent.

  6. #6
    OK, dank voor de suggesties.
    Ik denk dat ik in de GUI maar een controle opneem of de service loopt. De gebruiker moet dan na opstarten de GUI starten en krijgt een melding of de service actief is, zo niet: klik hier om de service te starten....

  7. #7
    Mijn persoonlijke mening: yuck

    Je bouwt iets in een service omdat het altijd moet werken, nu ga je daar de gebruiker mee lastig vallen. Je hebt zijn probleem niet opgelost. Maar dat zijn mijn 2 centen
    Marcel

  8. #8
    Quote Originally Posted by Marcel View Post
    Mijn persoonlijke mening: yuck
    Niet alleen je persoonlijke mening hoor

    Als je de service laat starten door de gebruiker dan kun je nét zo goed dat stukje functionaliteit in je programma zetten (of een apart programma starten). Een andere mogelijkheid is natuurlijk de service "stil" te starten. Dat doen bijvoorbeeld een aantal andere programma's ook die een service nodig hebben en de service is niet gestart omdat dat niet nodig is bij het starten van de computer. Maar een vraag stellen aan de gebruiker zou ik in ieder geval nooit doen.

    Maar je moet eerst even beoordelen of dat deel van je programma/service wel echt als service geïmplementeerd dient te worden. Want zoals je het nu dus aangeeft (laten starten door de gebruiker indien nog niet gestart) dan lijkt mij dat deze service niet altijd beschikbaar hoeft te zijn.

  9. #9
    @ Marcel, @ Rik

    Dank voor jullie beide zeer gewaardeerde opmerkingen!
    Uiteraard vind ik ook dat als je iets maakt, het zo goed mogelijk dient te zijn.
    De reden voor een service is mede vanwege de betere stabiliteit, en omdat de eventuele gebruiker de toepassing niet zomaar en/of per ongeluk kan beëindigen.
    Eventuele gebruiker, omdat de toepassing ook veel op een server zal draaien.
    Het zit me dwars dat ik er niet achter kan komen waarom de service bij re-boot niet gewoon weer start. Het systeem probeert het wel, maar geeft het na 30 seconden op.
    Als ik het handmatig start via services.msc, duurt het nog geen 3 seconden om te starten.
    Vertraging in de service inbouwen maakt geen verschil.
    Ik heb nergens iets kunnen vinden om de wachttijd (die 30 sec. dus) aan te passen, c.q. te verlengen. Ook met auto-delay geprobeerd, je snapt het al, geen verschil.
    De aanvulling in de GUI moest ik evengoed maken, want er zijn altijd slimmeriken die de gebruiksaanwijzing niet lezen, en uitsluitend de GUI (proberen te) installeren. Als die nu wordt gestart, wordt gelijk duidelijk of de service a) is geïnstalleerd en b) of deze draait.
    Misschien is jullie standpunt na deze (uitvoerige) uitleg wat milder, ;-)!
    Blijft mijn vraag: wie heeft een tip om een service die niet automatisch start bij re-boot, dit wel te laten doen??
    Vast bedankt!!
    Anton

  10. #10
    Ik weet niet wat de service precies allemaal doet maar je zou een log/debug-bestand kunnen maken in je service. Als je op heel veel plaatsen een log-regel aanmaakt (en het bestand weer sluit zodat die regel echt geschreven is) dan kom je er misschien achter waar precies in je service het probleem zit.

    Ik vindt het wel raar dat een Automatic met Delay niet werkt want dan zou hij pas na 2 minuten opgestart worden en dat zou niet anders mogen zijn dan dat je programma die service start. (Tenzij je service afhankelijk is van een andere service die ook met een Delay start en jouw service toevallig eerder start.)

    Als je service afhankelijk is van een Database-service dan zou je in het tabblad Dependencies van jouw service die Database-service op kunnen nemen. Dan weet je zeker dat die in de lucht is.

  11. #11
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Zoals Rik al suggereert: zeker een log-functie inbouwen.

    Daarnaast is het misschien handig als je een beetje algemene informatie deelt over wat je service bij het opstarten ongeveer *doet*, want het is duidelijk dat er in die hoek iets fout gaat. Gebruik je componenten die afhangen van windows messages (forms, message boxes, timers), spreek je een database aan, doe je aanroepen naar netwerk-schijven of het internet, etc. etc.

    Omdat het probleem relatief makkelijk reproduceerbaar is kun je je service ook uitkleden (code uitcommentariseren) tot het werkt. Een lege service heeft het probleem *niet*, dat is in ieder geval zeker .

  12. #12
    Je kan bij services opgeven dat ze delayed moeten starten. Verder kun je de service zo ver mogelijk uitkleden, zodat deze (vanuit Windows' perspectief) zo snel mogelijk start, en daarna pas de échte initializatie gaat doen. Verder kan je service tijdens het opstarten ook aan Windows laten weten dat hij nog bezig is en dat hij meer tijd nodig heeft. Zo kan hij de limiet van 30 seconden wel overschrijden.
    1+1=b

  13. #13
    Dank voor de berichten hierover.
    Bij nader onderzoek blijkt dat de service een netwerkcomponent moet starten waar "admin" bevoegdheid voor nodig is.
    Ik krijg dat niet voorelkaar bij Win 7, wel bij XP, dat gaat prima.

  14. #14
    Wat moet er precies worden gestart? Je kunt altijd spelen met de gebruiker waar je service onder wordt gestart, die kun je hogere rechten geven.
    Marcel

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •