Hallo DPler,
ich habe in meinem Programm (Kiosk-Anwendung) den Punkt Beenden, hierbei soll der Rechner heruntergefahren werden. Bisher habe ich das mit ShellExecute() und "shutdown -s -f -t 0" realisiert.
Dabei ist mir jedoch aufgefallen das keine Updates installiert werden falls welche heruntergeladen wurden.
Die Windows Update Einstellungen stehen auf "Updates herunterladen, aber Installation manuell durchführen". Es sollen nämlich die Updates erst beim Beenden installiert werden.
Jetzt habe ich im internet und auch hier im Forum gesucht und bin auf einen
Thread von
devidespe gestoßen der genau das Gegenteil wollte, nämlich herunterfahren ohne die Installation von Updates.
Also dachte ich mir nehme ich doch den Code und alles wäre geritzt aber nix da der Rechner fährt direkt runter.
Delphi-Quellcode:
function WindowsShutDown(Computer : string; Msg : string; Time: Word; Force : Boolean; Reboot: Boolean) : Boolean;
var rl, hToken : Cardinal;
tkp : TOKEN_PRIVILEGES;
begin
Result:=False;
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
ShowMessage('Fehler beim Windows-Shutdown aufgetreten.') else
begin
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
begin
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount:=1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
if GetLastError <> ERROR_SUCCESS then
ShowMessage('Fehler beim Windows-Shutdown aufgetreten.') else
begin
Result:=InitiateSystemShutdown(PChar(Computer), PChar(Msg), Time, Force, Reboot);
if Result = False then
ShowMessage('Fehler beim Windows-Shutdown aufgetreten.');
end;
end else ShowMessage('Fehler beim Windows-Shutdown aufgetreten.');
end;
end;
Jetzt ging es in dem Thread weiter und Jemand schlug die Funktion
InitiateShutdown()
vor mit dem Flag SHUTDOWN_INSTALL_UPDATES.
Mir gelingt es jedoch einfach nicht diese Funktion zu implementieren.
Delphi-Quellcode:
const
SHUTDOWN_FORCE_OTHERS = $00000001;
SHUTDOWN_FORCE_SELF = $00000002;
SHUTDOWN_GRACE_OVERRIDE = $00000020;
SHUTDOWN_HYBRID = $00000200;
SHUTDOWN_INSTALL_UPDATES = $00000040;
SHUTDOWN_NOREBOOT = $00000010;
SHUTDOWN_POWEROFF = $00000008;
SHUTDOWN_RESTART = $00000004;
SHUTDOWN_RESTARTAPPS = $00000080;
type
function InitiateShutdown(lpMachineName, lpMessage: LPWSTR; dwGracePeriode, dwShutdownFlags, dwReason: DWORD): DWORD; stdcall;
implementation
function InitiateShutdown; external advapi32 name 'InitiateShutdown';
Die Entwicklung geschieht in Delphi 2009 unter Windows XP, die Software wird jedoch nur auf Windows 7 Rechner eingesetzt.
Hat jemand eine Idee was ich falsch mache bzw. eine Idee woran es liegen kann das man beim herunterfahren die Updates nicht installiert werden?