@Holgi,
eine Bemerkung zu dem Code
Code: Alles auswählen
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)
Die Verwechslung von System32 und SysWOW64 kenne ich bisher von ähnlichen Code-Schnipseln auf GitHub.
Ein Beispiel hier
https://gitlab.com/openconnect/openconn ... issues/308
Die Variable %PROCESSOR_ARCHITECTURE% enthält je nach der Art des Programms, unter dem sie abgefragt wird entweder x86 oder AMD64.
Beispiel 1:
cmd.exe unter C:\Windows\SysWOW64 liefert x86
C:\Windows\SysWOW64>echo %PROCESSOR_ARCHITECTURE%
x86
Beispiel 2
cmd.exe unter C:\Windows\System32 liefert AMD64
C:\Windows\System32>echo %PROCESSOR_ARCHITECTURE%
AMD64
Die Abfrage EQU "amd64" liefert unter cmd.exe (64 Bit) AMD64 zurück, unter cmd.exe (32 Bit) x86.
Die anschließende Verzweigung in SysWOW64 ist bei Rückgabe von AMD64 dann natürlich unsinnig, weil die Version für 32 Bit aufgerufen wird.
SysWOW64 gibt es nur auf Systemen mit 64 Bit und enthält die Versionen für 32 Bit.
Das wird gerne falsch verstanden, weil Microsoft auch auf dem BS mit 64 Bit an der Bezeichnung System32 festgehalten hat, obwohl da tatsächliche die Programme enthalten sind, die für 64 Bit kompiliert wurden.
Letztendlich sorgt dieses If nur dafür, dass immer die 32 Bit-Version von cacls.exe benutzt wird.
Entweder die aus SysWOW64 auf Windows mit 64 Bit oder aus System32 bei 32 Bit.
Hat zwar mit dem eigentlichen Problem nichts zu tun, aber der nächste kopiert dann auch wieder Unsinn, wenn er hier darauf stößt.