Page 1 of 1

Bessere Prüfung der Registry-Zweige auf 64 bit OS

PostPosted: 08.05.2018, 23:00
by Dalai
Ein Hallo in die Runde :)

Mal wieder ist ein anderes Thema bzw. ein Problembericht der Auslöser für diesen Vorschlag, diesmal wegen The Windows Script Host is disabled. Im genannten Thema wird klar, dass WOU den 32 bit Zweig der Registry prüft wegen der erwähnten Redirection, während der Benutzer - sofern er es richtig* macht - im 64 bit Zweig nachschaut.

*) Das Richtigmachen ist ein eigenes Thema, das ich nicht weiter vertiefen will wegen der Untiefen des Windows OS ;).

Vorschlag: Im UpdateInstaller den Rootkey bei den Schlüsseln, bei denen es notwendig ist und die der Redirection unterliegen (HKLM\Software), auf den 64 bit Zweig setzen. AutoIt stellt dafür eine Möglichkeit bereit, auch wenn die etwas anders aussieht als in anderen Programmiersprachen. Beispiel, anhand des WSH-Zweigs:
Code: Select all
; Registry constants
if (@OSArch == "X64") then
    Global const $ROOTKEY             = "HKLM64"
else
    Global const $ROOTKEY             = "HKLM"
EndIf
Dim Const $reg_key_wsh_hklm           = $ROOTKEY & "\Software\Microsoft\Windows Script Host\Settings"

Ggf. muss man die Schlüssel einzeln prüfen, ob die Änderung bei jedem nötig ist. Normalerweise sollte es aber egal sein, weil sie gespiegelt bzw. automatisch synchronisiert werden (wie wohl im Falle des Schlüssels für WUAU/wuauserv oder auch PowerShell und IE).

Sollte angedacht sein, in Zukunft den UpdateInstaller auch als 64 Bit Kompilat zur Verfügung zu stellen, müsste die Bedingung etwas anders aussehen. Beispiel aus meinem Code-Fundus:
Code: Select all
global const $X64REDIRECT = (@OSArch == "X64" AND NOT @AutoItX64)
if $X64REDIRECT then
    Global const $ROOTKEY             = "HKLM64"
else
   ...


Grüße
Dalai

Re: Bessere Prüfung der Registry-Zweige auf 64 bit OS

PostPosted: 15.05.2018, 21:59
by WSUSUpdateAdmin
Moin Dalai,

danke schön! :)
Das sehe ich mir an und bessere es nach.

Gruß
Torsten

Re: Bessere Prüfung der Registry-Zweige auf 64 bit OS

PostPosted: 18.05.2018, 15:34
by WSUSUpdateAdmin
Moin!

Ich hab' das jetzt mal eingebaut, allerdings (zunächst) nur für den WSH, weil ich auch denke, dass es in den meisten
anderen Fällen keinen Unterschied und somit auch keinen Ärger macht.

Vielen Dank nochmal! :)

Viele Grüße und schöne Pfingsten,
Torsten

Re: Bessere Prüfung der Registry-Zweige auf 64 bit OS

PostPosted: 18.05.2018, 18:29
by Dalai
Danke für's Einbauen! Derzeit denke ich ebenfalls, dass die Anpassung für den WSH ausreicht.

Die If-Bedingung kann man noch verkürzen. Statt
Code: Select all
  If (@OSArch <> "X86") Then
    $reg_val = RegRead($reg_key_wsh_hklm64, $reg_val_enabled)
    If ($reg_val = "0") Then
      Return 0
    EndIf
  Else
    $reg_val = RegRead($reg_key_wsh_hklm, $reg_val_enabled)
    If ($reg_val = "0") Then
      Return 0
    EndIf
  EndIf
reicht
Code: Select all
  If (@OSArch <> "X86") Then
    $reg_val = RegRead($reg_key_wsh_hklm64, $reg_val_enabled)
  Else
    $reg_val = RegRead($reg_key_wsh_hklm, $reg_val_enabled)
  EndIf
  If ($reg_val = "0") Then Return 0
Man kann sich streiten, ob man das Then der letzten if-Bedingung derart verkürzt; ich mach das gern, wenn nur ein simples Statement folgt, wie in diesem Fall ein Return (weniger Schreibarbeit ;)).

Grüße und ebenfalls schöne (und ruhige) Pfingsten
Dalai

Re: Bessere Prüfung der Registry-Zweige auf 64 bit OS

PostPosted: 22.05.2018, 15:02
by WSUSUpdateAdmin
Moin!

Das ist natürlich vollkommen richtig und vielleicht auch ein bisschen peinlich :oops: - wie dem auch sei, ich bin auch immer für einfachen Code, korrigiere das und schieb's mal auf Freitagnachmittag vor dem Pfingstwochenende. ;)

Gruß
Torsten

Re: Bessere Prüfung der Registry-Zweige auf 64 bit OS

PostPosted: 22.05.2018, 15:44
by Dalai
Alles gut :mrgreen:. Ist schließlich eine erst durch die Änderung des Codes entstandene Redundanz. Ein durch Kopierpaste eingeführter Fehler wäre schlimmer.

Grüße
Dalai