Bei Benutzung von Dateilockings von Datenbanken kann es zu erheblichen Datenschädigungen, wenn nach einem Windowsupdate kein Neustart durchgeführt wurde. Deshalb soll ein Programm dem Benutzer melden, wenn das Windows nach einem Update nicht neugestartet wurde. Nach viel Recherche und etwas Ausprobieren, habe ich herausgefunden, dass es einen Registry-Ordner namens '
HKLM\Software\Microsoft\Windows\CurrentVersion\Wi ndowsUpdate\Auto Update\RebootRequired' gibt, welcher genau diese Aussage macht. Diesen möchte ich nun in meiner Delphianwendung abfragen (siehe Code unten), ob dieser existiert, denn die reine Existenz dieses Ordners gibt die entscheidende Antwort.
Das funktioniert aber nicht. Man ließt in anderen Beiträgen, dass es an fehlenden Adminrechten liegen kann, aber selbst, wenn man die Anwendung manuell als Admin startet, funktioniert es hier nicht. Die Funktion liefert immer false zurück. Zum Testen habe ich den Key immer etwas gekürzt zu '\SOFTWARE\Microsoft\Windows\CurrentVersion\Window sUpdate\', weil dieser Ordner ja vorhanden ist. Aber auch das funktioniert einfach nicht.
Hat jemand eine Idee, wie man das hinbekommt?
Code:
function RechnerNeustart_nach_WindowsUpdates_ausstehend : boolean; // '
HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
var reg : TRegistry;
begin
result:= false;
reg:= TRegistry.Create(KEY_READ);
try
reg.RootKey:= HKEY_Local_Machine;
// reg.RootKey:= HKEY_CURRENT_USER; <- geht
// if reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate') then
// if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\', False) = True then
// if reg.OpenKey('\SOFTWARE\Adobe\', False) = True then <- geht
if reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired') then
begin
result:= True;
end else begin
end;
finally
reg.Free;
end;
end;
Markus