64-Bit-Unterstützung unter Windows [W]

Der opsi-script ist ein 32 Bit-Programm. Damit sich auch 32 Bit-Programme auf 64 Bit-Systemen normal arbeiten können, gibt es für 32 Bit-Programme sowohl in der Registry als auch im Dateisystem Spezialbereiche auf die Zugriffe umgeleitet werden, die sonst in 64 Bit vorbehaltenen Bereichen landen würden.

So wird ein Zugriff auf c:\windows\system32 umgelenkt auf c:\windows\syswow64.

Aber ein Zugriff auf c:\program files wird nicht umgelenkt auf c:\program files (x86).

So wird ein Registry Zugriff auf [HKLM\software\opsi.org] umgelenkt auf [HKLM\software\wow6432node\opsi.org].

Tabelle 1. Registry Redirection Grundregel

Key

Windows Server 2008 R2, Windows 7, and Newer

HKEY_LOCAL_MACHINE\SOFTWARE

Redirected

HKEY_CURRENT_USER\SOFTWARE

Shared

Die obenstehende Regel ist die einfache Regel zum merken.
Im Detail ist es allerdings komplizierter, da es unterhalb von redirected Zweigen auch welche ohne redirection (shared) geben kann die dann wieder Zweige enthalten welche wieder redirected werden.

Tabelle 2. Registry Redirection mehr Details

Key

Windows Server 2008 R2, Windows 7, and Newer

HKEY_LOCAL_MACHINE\SOFTWARE

Redirected

HKEY_LOCAL_MACHINE\SOFTWARE\Classes

Shared

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID

Redirected

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DirectShow

Redirected

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface

Redirected

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Media Type

Redirected

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MediaFoundation

Redirected

HKEY_CURRENT_USER

Shared

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID

Redirected

HKEY_CURRENT_USER\SOFTWARE\Classes\DirectShow

Redirected

HKEY_CURRENT_USER\SOFTWARE\Classes\Interface

Redirected

HKEY_CURRENT_USER\SOFTWARE\Classes\Media Type

Redirected

HKEY_CURRENT_USER\SOFTWARE\Classes\MediaFoundation

Redirected

Tatsächlich ist es noch komplizierter. Die obigen Tabellen sind nur Teile der Originaltabelle. Die vollständige Tabelle mit allen Details finden Sie hier:
https://learn.microsoft.com/en-us/windows/win32/winprog64/shared-registry-keys#redirected-shared-and-reflected-keys-under-wow

opsi-script installiert daher als 32 Bit-Programm Skripte, die unter 32 Bit laufen, auch in 64 Bit-Systemen korrekt.

Für die Installation von 64 Bit-Programmen liefern einige alte Konstanten wie '%ProgramFilesDir%'´ für 64 Bit-Programme die falschen Werte. Daher gibt es ab opsi-script Version 4.10.8 folgende Neuerungen:

In der Regel kann (und sollte) nun explizit angegeben werden, wohin geschrieben und woher gelesen werden soll. Dazu gibt es drei Varianten:

32

Explizit 32 Bit

64

Explizit 64 Bit. Wenn nicht auf einem 64 Bit System, dann wie SysNative.

SysNative

Entsprechend der Architektur des Betriebssystems auf dem das Skript läuft.

Entsprechend gibt es zusätzlichen Konstanten:

Tabelle 3. Konstanten
Konstante 32 Bit 64 Bit

%ProgramFilesDir%

c:\program files

c:\program files (x86)

%ProgramFiles32Dir%

c:\program files

c:\program files (x86)

%ProgramFiles64Dir%

c:\program files

c:\program files

%ProgramFilesSysnativeDir%

c:\program files

c:\program files

%ProgramFilesDir%

sollte in Zukunft besser gemieden werden. Verhält sich genauso wie %ProgramFiles32Dir%.

%ProgramFiles32Dir%

sollten Sie verwenden, wenn Sie explizit 32 Bit-Software installieren wollen.

%ProgramFiles64Dir%

sollten Sie verwenden, wenn Sie explizit 64 Bit-Software installieren wollen.

%ProgramFilesSysnativeDir%

sollten Sie verwenden, wenn Sie auf den Default der Architektur zugreifen wollen.

Für den Zugriff auf eigentlich 64 Bit-Software vorbehaltene Bereiche kennt der opsi-script folgende zusätzlichen Befehle:

  • GetRegistrystringvalue32, GetRegistrystringvalue64, GetRegistrystringvalueSysNative (besser: getRegistryValue)

  • getRegistryKeyList32, getRegistryKeyList64, getRegistryKeyListSysNative (besser: getRegistryKeyList)

  • getRegistryVarList32, getRegistryVarList64, getRegistryVarListSysNative (besser: getRegistryVarList)

  • getRegistryVarMap32, getRegistryVarMap64, getRegistryVarMapSysNative (besser: getRegistryVarMap)

  • FileExists32, FileExists64, FileExistsSysNative

  • getFileInfoMap32, getFileInfoMap64, getFileInfoMapSysNative

Bei den folgenden Funktionen kann die Zugriffsart als optionaler Parameter mitgegeben werden (der default ist sysnative):

  • getRegistryValue

  • RegKeyExists

  • RegVarExists

  • powershellCall

  • FileOrFolderExists

  • DirectoryExists

  • listFiles

Bei den folgenden Funktionen muss die Zugriffsart als Parameter mitgegeben werden:

  • getRegistryKeyList

  • getRegistryVarList

  • getRegistryVarMap

Registry-Sektionen schreiben in den 32 Bit-Bereich der Registry. Ebenfalls werden in Files-Sektionen Zugriffe auf c:\windows\system32 umgelenkt.

Für Registry, Files und Winbatch Sektionen gibt es daher nun die Aufrufparameter:

  • /32Bit

    Das ist der Default. Schreibzugriffe werden in die 32 Bit-Registry bzw. das 32 Bit-Systemverzeichnis gelenkt.

  • /64Bit
    Schreibzugriffe werden in die 64 Bit-Registry bzw. das 64 Bit-Systemverzeichnis gelenkt. Gibt es diesen nicht, so wird der architekturspezifische Zweig verwendet.

  • /SysNative
    Schreibzugriffe werden in den architekturspezifischen Zweig der Registry bzw. des Systemverzeichnisses gelenkt.

Für ShellScript und Execwith gilt dasselbe, nur dass die Parameter durch das Schlüsselwort winst abgegrenzt werden müssen.

Beispiel:

ShellScript_do_64bit_stuff winst /64Bit