[vb5/6] Afvangen logoff, shutdown of reboot

Pagina: 1
Acties:

  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 15:34
Wij draaien een database systeem welke al service in een windows 2000 omgeving draait.
Zodra windows afsluit dient eerst deze service gestopt te worden dit kan wel eens 2 minuten duren.
Daarom hebben we een tijd terug (paar jaar) een programmatje gebouwed welke de afsluit knop van windows dient te vervangen.
Deze sluiten eerst de service en dan pas windows, dit gaat allemaal goed.
Alleen nu zijn er veel gebruikers welke toch de windows knop gebruiken, waardoor de database service crasht.
Om dit te voorkomen heb ik onze applicatie aangepast, zodat zodra windows afgesloten word, cancel hij de shutdown, sluit dan de service en gooit dan de pc plat. ook dit gaat goed, alleen als je nu een logoff dan gooit hij ook de pc plat, en dat is niet te bedoelling.

Is er een manier om te zien wat de gebruiker gekozen heeft: logoff, reboot of shutdown?

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


Verwijderd

Ik neem aan dat je subclassing gebruikt om te detecteren of je programma een WM_QUERYENDSESSION (&H11) ontvangt. Zoja dan kan je aan de ontvangen lparam zien of er een Log Off of een Shutdown/Reboot gaat plaatsvinden.
Als lparam gelijk is aan &H80000000 dan is er sprake van een Log Off

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik vind dit eigenlijk meer symptoombestrijding. Kun je niet beter iets doen aan het afsluiten van je service? Ik vind 2 minuten behoorlijk lang. Ik weet natuurlijk niet wat er allemaal gebeurd in die tijd, dus als je daar wat over zou kunnen uitwijden; graag.

Verder: Zie http://www.vbaccelerator....f_or_Shutdown/article.asp
en http://msdn.microsoft.com...tem_shutdown_messages.asp
Verwijderd schreef op 03 augustus 2004 @ 12:25:
Als lparam gelijk is aan &H80000000 dan is er sprake van een Log Off
...Note that this parameter is a bit mask. To test for this value, use a bit-wise operation; do not test for equality.
Effe oppassen dus!!!

[ Voor 60% gewijzigd door RobIII op 03-08-2004 12:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 15:34
RobIII schreef op 03 augustus 2004 @ 12:28:
Ik vind dit eigenlijk meer symptoombestrijding. Kun je niet beter iets doen aan het afsluiten van je service? Ik vind 2 minuten behoorlijk lang. Ik weet natuurlijk niet wat er allemaal gebeurd in die tijd, dus als je daar wat over zou kunnen uitwijden; graag.

Verder: Zie http://www.vbaccelerator....f_or_Shutdown/article.asp
en http://msdn.microsoft.com...tem_shutdown_messages.asp
Het gaat in dit geval om de database service D3NT (voorheen Pick).
Pick draaide vroeger als alleen staand systeem, maar omdat de hardware te snel gaat hebben ze heel hun omgeving ondergebracht in een service.
En zodra deze afgesloten word moeten alle threads in de service ook afgesloten worden.

Je kan het als volgt zien:
Ik draai windows en daarin draai ik een andere OS.
eerst dien ik het D3 OS af te sluiten en dan pas het Windows OS.
Dat ik dat niet dan crasht D3 en genereerd hij fouten.

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mr-FaTMeN schreef op 03 augustus 2004 @ 12:36:
[...]


Het gaat in dit geval om de database service D3NT (voorheen Pick).
Pick draaide vroeger als alleen staand systeem, maar omdat de hardware te snel gaat hebben ze heel hun omgeving ondergebracht in een service.
En zodra deze afgesloten word moeten alle threads in de service ook afgesloten worden.

Je kan het als volgt zien:
Ik draai windows en daarin draai ik een andere OS.
eerst dien ik het D3 OS af te sluiten en dan pas het Windows OS.
Dat ik dat niet dan crasht D3 en genereerd hij fouten.
Windows stopt toch gewoon alle services voordat 'ie afsluit :? En ik neem aan dat je app éérst wordt afgeschoten voordat windows de service probeert te stoppen? En wat is dan het probleem? Alles gaat dan toch in de juiste volgorde?

En als die "service" er niet tegen kan om door Windows gestopt te worden, dan zou ik eens een schop tegen de schenen van de makers geven. Dat kan toch niet meer anno 2004? (Ik vind het sowieso een raar verhaal, ook je vergelijking volg ik niet helemaal...)

En van wie is D3NT nu? Ik kan alleen maar wat posts op fora hierover vinden, maar geen "homepage"... Het was effe zoeken, maar ik heb 'm :P

[ Voor 21% gewijzigd door RobIII op 03-08-2004 12:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 21-05 08:21
Kan je het niet makkelijker met policies afvangen ?
Gewoon de logoff en shutdown verwijderen uit je menu's....

The best thing about UDP jokes is that I don't care if you get them or not.


Verwijderd

Ik sluit me aan bij RobIII.

Als de service fatsoenlijk geprogrammeerd is, dan hoort hij automatisch gestopt te worden bij het afsluiten van Windows.

Als een puntje van interesse: hoe stop je de service nu dan? Via "NET STOP" of wat dan ook? Als dat namelijk werkt, dan werkt gewoon afsluiten met Windows ook.

Wat wèl kan gebeuren, omdat de service (blijkbaar) zo veel tijd nodig heeft om af te sluiten, dat het proces gewoon afgekapt wordt. Windows killt services bij het afsluiten na 20 seconden, om te voorkomen dat een hangende service de computer op dat moment laat hangen.

Echter, holee ende jolijt, de duur van deze wachttijd kun je veranderen, zodat je je service voldoende tijd kan geven om op normale wijze af te sluiten.

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 21-05 08:21
Verwijderd schreef op 03 augustus 2004 @ 15:37:
[knip]
Wat wèl kan gebeuren, omdat de service (blijkbaar) zo veel tijd nodig heeft om af te sluiten, dat het proces gewoon afgekapt wordt. Windows killt services bij het afsluiten na 20 seconden, om te voorkomen dat een hangende service de computer op dat moment laat hangen.

Echter, holee ende jolijt, de duur van deze wachttijd kun je veranderen, zodat je je service voldoende tijd kan geven om op normale wijze af te sluiten.
Bij exchange duurt de sa service (system attendent) vaak langer dan 2 minuten.
Hangt natuurlijk ook een beetje af van je .edb
Maar schijnbaar wacht windows hier wel netjes op met afsluiten, ipv van de default tijd te gebruiken en dan het proces te killen.

Ik blijf erbij dat je het te ver zoekt met je applicatie.
Gewoon policies op de pc en klaar.....
Nog geen 2 minuten werk.

The best thing about UDP jokes is that I don't care if you get them or not.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Remc0 schreef op 03 augustus 2004 @ 16:14:
[...]
Ik blijf erbij dat je het te ver zoekt met je applicatie.
Gewoon policies op de pc en klaar.....
Nog geen 2 minuten werk.
En dan :? Dan mogen je gebruikers de PC niet meer uitzetten? Fijn is dat :)

En nogmaals, dat is gewoon symptoombestrijding, het lost niets op. "RainingData" hoort gewoon te zorgen dat 't ding fatsoenlijk kan worden afgesloten (als het dat niet doet, en dat lijkt me sowieso al stug). Als het als service draait lijkt het me erg sterk dat die service zelf niet (net als de sa service van exchange inderdaad) voorkomt dat 'ie onderuit gehaald wordt.

Als je de service met de hand stopt (via services in je systeembeheer, of met een NET STOP), doet 'ie er dan ook zo lang over? Of heeft je app op het moment van afsluiten nog 2 minuten die service nodig (om snel wat dingetjes weg te schrijven ofzo). Want als dat laatste het probleem is, dan zou ik me app nog eens herzien. Als toch blijkt dat het eerste het probleem is, dan zou ik eens contact opnemen met "RainingData"...

En nu kap ik met speculeren... Ik wil eerst wel eens wat meer en uitgebreidere info van de TS, want met gissen komen we er ook niet...

[ Voor 11% gewijzigd door RobIII op 03-08-2004 16:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

@RobIII
Goed dat je de info geeft om een bit-wise operation te gebruiken i.p.v. een is gelijk aan vergelijking. Echter de code die je bij de door jouw genoemde link http://www.vbaccelerator....f_or_Shutdown/article.asp ziet staan lijkt me niet in orde.
Visual Basic:
1
2
If (lParam Or ENDSESSION_LOGOFF) = ENDSESSION_LOGOFF Then
...

Via de OR vergelijking kom je nl. nooit aan de Else toe om een Shutdown/Reboot te herkennen.
Als je i.p.v. OR AND gebruikt werkt het wel goed.
Visual Basic:
1
2
If (lParam And ENDSESSION_LOGOFF) Then
...

@Remc0
LogOff en Shutdown verwijderen uit menu's m.b.v. policies? Ik zie daar weinig nut in. Gebruikers moeten toch gewoon windows kunnen herstarten wanneer ze dat willen. Haal je die opties weg dan maak je het alleen erger want dan gaan ze vast de aan/uit knop gebruiken om af te sluiten.

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 21-05 08:21
RobIII schreef op 03 augustus 2004 @ 16:34:
[...]

En dan :? Dan mogen je gebruikers de PC niet meer uitzetten? Fijn is dat :)
[knip]
:?
De ts geeft toch aan dat er een programma is wat ze moeten gebruiken, en wat wel werkt met de service stoppen en dan de pc uit ?
Als je dan met policies de standaard knoppen weghaald moeten ze wel via dat programma de pc afsluiten.... toch ?

The best thing about UDP jokes is that I don't care if you get them or not.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 03 augustus 2004 @ 16:44:
@RobIII
Goed dat je de info geeft om een bit-wise operation te gebruiken i.p.v. een is gelijk aan vergelijking. Echter de code die je bij de door jouw genoemde link http://www.vbaccelerator....f_or_Shutdown/article.asp ziet staan lijkt me niet in orde.
Visual Basic:
1
2
If (lParam Or ENDSESSION_LOGOFF) = ENDSESSION_LOGOFF Then
...

Via de OR vergelijking kom je nl. nooit aan de Else toe om een Shutdown/Reboot te herkennen.
Als je i.p.v. OR AND gebruikt werkt het wel goed.
Visual Basic:
1
2
If (lParam And ENDSESSION_LOGOFF) Then
...
Ik gaf die link alleen maar ter referentie voor de API's e.d. , niet ter copy-paste. Programmeren houdt toch nog altijd ZELF denken in :? En daarom plaatste ik ook die opmerking uit de MSDN.
Verwijderd schreef op 03 augustus 2004 @ 16:44:
@Remc0
LogOff en Shutdown verwijderen uit menu's m.b.v. policies? Ik zie daar weinig nut in. Gebruikers moeten toch gewoon windows kunnen herstarten wanneer ze dat willen. Haal je die opties weg dan maak je het alleen erger want dan gaan ze vast de aan/uit knop gebruiken om af te sluiten.
100% mee eens. En het is ook nog eens een bagger oplossing voor het probleem. Bestrijd het probleem nou gewoon i.p.v. maar een plakbandoplossing te vinden. Daar heb je veel meer profijt van.

Die policy is alleen handig in het geval van internetzuilen ofzo (en zelfs daar kan over getwist worden). En ja, er zijn vast meer toepassingen voor die policy te bedenken (voordat we daar straks compleet mee offtopic gaan)

Laten we nou proberen deze draad te besteden aan het vinden van een oplossing voor de TS, en liefst 1tje die doet wat 'ie moet doen: Niets aan functionaliteit veranderen en toch Windows (en de app) in staat stellen netjes af te sluiten.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

@RobIII
Tuurlijk, zelf denken lijkt me ook het beste ;) Ik vermelde het alvast maar mocht iemand hier tegenaan lopen en niet begrijpen waarom e.e.a. niet werkt met die code.
Overigens heb ik voor deze functionaliteit altijd zonder problemen If lParam=&H80000000 Then gebruikt i.p.v. AND en kan me ook niet zo 1,2,3, voorstellen wat hierbij een probleem zou kunnen zijn/worden.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 03 augustus 2004 @ 17:28:
@RobIII
Tuurlijk, zelf denken lijkt me ook het beste ;) Ik vermelde het alvast maar mocht iemand hier tegenaan lopen en niet begrijpen waarom e.e.a. niet werkt met die code.
Overigens heb ik voor deze functionaliteit altijd zonder problemen If lParam=&H80000000 Then gebruikt i.p.v. AND en kan me ook niet zo 1,2,3, voorstellen wat hierbij een probleem zou kunnen zijn/worden.
Het zal ook allemaal los lopen, maar vooral als MS al waarschuwt in de MSDN hou ik er toch altijd rekening mee. Wie weet wat voor bits ze straks nog meer gaan meegeven in Windows XQ of Windows 2018 :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1