[win32/C++] Stoppen en pauzeren van een service

Pagina: 1
Acties:

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Wazig probleem met het besturen van mijn twee services. Ik gebruik het stukje code hieronder om mijn services (wanneer deze eenmaal gestart zijn) te stoppen en te pauzeren. Om de service te pauzeren is dwControl SERVICE_CONTROL_PAUSE. Om de service te stoppen is dwControl SERVICE_CONTROL_STOP.

Ok, nu het probleem. Het starten en stoppen van de services gaat altijd goed. Het gaat fout als ik een van de twee services probeer te pauzeren. Dus, beide services zijn gestart en ik vraag een service om te pauzeren. Dan gebeurt het: de verkeerde service pauzeert. Vreemd, want dit gebeurt met dezelfde code als het stoppen van de service en dat gaat wel goed!! Iemand enig idee wat hier aan de hand kan zijn??


SERVICE_STATUS ss;

// Stop / pause the service
if (!ControlService (hService, dwControl, &ss))
{
dwErr = GetLastError ();
}

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Klinkt wel erg fantasievol. Welk OS gaat het om? Heb je al in de Knowledge Base gezocht? (Wel de Engelse gebruiken trouwens).

Professionele website nodig?


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ligt het niet aan de implementatie van die service?

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Zou wel heel knap zijn om in de service de Pause request zo enorm verkeerd af te handelen dat API's 'm doorgooien naar een andere service. Zou hoe dan ook ook een bug in Win32 zijn (dus wederom KB zoeken ;) ).

Professionele website nodig?


  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Ik heb een andere developer hier ook nieuwsgierig gekregen dus ook hij is er eens mee aan het stoeien. Ik had al in de knowledge base zitten snuffelen maar werd daar niet zo heel veel wijzer van. Een artikel (http://support.microsoft....aspx?scid=kb;en-us;103648) trok wel even mijn aandacht maar dit heeft volgens mij niet te maken met de fysieke naam van de services. to be continued...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik mag daaruit afleiden dat je NT4 gebruikt?

Professionele website nodig?


  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
nee, daarom was het kb artikel ook niet helemaal van toepassing. Ik heb het hier op meerdere stations (win 2000 en XP prof) geprobeerd. Het probleem treedt op beide OS-en op. Ik ben nu het installeren (en registreren) van de service aan het nalopen. ik heb het gevoel dat er daar iets niet helemaal goed gaat.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

curry684 schreef op 23 May 2003 @ 11:10:
Zou wel heel knap zijn om in de service de Pause request zo enorm verkeerd af te handelen dat API's 'm doorgooien naar een andere service. Zou hoe dan ook ook een bug in Win32 zijn (dus wederom KB zoeken ;) ).
Als ik services goed begrijp regelt een service zelf wat ie met een pauze doet. En er kunnen meerdere services in dezelfde dll zitten, dus vandaar dat ik aan deze mogelijkheid dacht :)

We adore chaos because we like to restore order - M.C. Escher


  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
We vermoeden dat het iets te maken heeft met de basisklasse (library) waarin de installatie van de service is gedefinieerd. Ergens wordt er waarschijnlijk iets overschreven tijdens de installatie van de 2e service.

  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:24

The End

!Beginning

Probeer je vanuit de service manager de service te pauzeren of vanuit een zelfgeschreven client?

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Vanuit beide. Maar het resultaat is hetzelfde. Via beide mogelijkheden gaat het pauzeren verkeerd.

  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:24

The End

!Beginning

Heb je voor beide services een uniek uuid voor de interface gegenereerd? Als je dat niet doet, dan krijg je dit soort problemen. (Vooral bij het copy/pasten van code)

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
We verwachten inderdaad dat het iets met het copy/paste programmeren te maken heeft. Ik ben er naar op zoek maar kan zo snel niks vinden. Het kan inderdaad haast niet anders dan dat ze onder hetzelfde id geinstalleerd worden...

  • skiwi
  • Registratie: Februari 2001
  • Laatst online: 05-04 14:13
Opgelost!! In de Initialize in de service base class werd het pause event geinitialiseerd. Tja, als je daar dan je 2 services van af gaat leiden gaat het verkeerd. Beide hebben dan dezelfde event naam. Kortom, wanneer beide services draaien gold wie 't eerst komt 't eerst maalt. De oplossing is dus om de events pas te definieren in de afgeleide klasses.

stom stom stom 8)7 |:(

maar wel leerzaam. :) (positief denken)
thanks voor jullie hulp!!

[ Voor 20% gewijzigd door skiwi op 23-05-2003 16:25 ]

Pagina: 1