c # - Find ud af, om en Windows-genstart skyldes Windows-opdateringer

Indlæg af Hanne Mølgaard Plasc

Problem



Et par programmer på min pc har lavet en detektion, hvorvidt en genstart blev udført af Windows Update eller ej. Dette er observeret på grund af at de genstartes efter den automatiske Windows Update-genstart.


Dette er meget nyttigt, da disse applikationer genindlæser ændringer, selv ubesparede ændrer eller gendanner faner (i tilfælde af en browser). Eksempler på applikationer, der gør dette:



  • Google Chrome

  • Microsoft Visual Studio

  • Microsoft Paint



I alle tilfælde gemmer programmerne tilstanden , de var i, før genstart.


(Min pc blev faktisk vågnet automatisk fra en standby-tilstand og genstartede sig selv, mens du installerede opdateringer. Det var for dårlig at gå tilbage til standby efter at have gjort dette.)


Mit spørgsmål er: Hvordan registrerer jeg programmatisk denne genstart? Det ser ud til at være pålideligt påviseligt inden genstart.


Spørgsmålet Hvordan kan jeg få den sidste genstart fra Windows, kan virke som en duplikat, men intet svar sagde noget om opdateringer.


Jeg kode i C #, så et svar i C # ville være nyttigt, selvom jeg også kan læse C og C ++.

Bedste reference


Se Program genstart: [2]



  En applikation kan bruge programgendannelse og genstart (ARR) for at gemme data og angive oplysninger, før programmet udgår på grund af en uhåndteret undtagelse eller når programmet ikke længere svarer



og:



  eller hvis computeren skal genstartes som følge af en opdatering.



Applikationerne kan ikke genopdage genstart grunden - de er blevet bygget til at bruge denne API. Der er ikke (så vidt jeg er bekendt) en administreret API til dette.





Et par klik væk gemmer data og applikationstilstand, når applikationen lukkes på grund af en softwareopdatering. Igen, ingen administreret API. [3]

Andre referencer 1


Normalt når Windows Reboots udfører det en genstart ved hjælp af shutdown.exe og/g flag, som gemmer tilstanden for alle registrerede kørende programmer, før genstart. Hvad du vil gøre er at registrere din ansøgning om genstart. Der er en god prøve med dokumentation herfor af MSDN. Den er tilgængelig i C # og C ++. [4]