![通过 PowerShell 从 7-zip SFX 安装程序读取 x64 注册表分支](https://linux22.com/image/1394336/%E9%80%9A%E8%BF%87%20PowerShell%20%E4%BB%8E%207-zip%20SFX%20%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F%E8%AF%BB%E5%8F%96%20x64%20%E6%B3%A8%E5%86%8C%E8%A1%A8%E5%88%86%E6%94%AF.png)
我希望我的 7-zip 自解压存档在提取文件后运行 PowerShell 脚本。为此,我使用此处描述的方法:http://www.sphaero.org/blog:2011:0504_7zip_self_extracting_autostart_exe
文件提取后,我想要运行一个 powershell 脚本,因此这是我的 config.txt 文件内容:
;!@Install@!UTF-8!
RunProgram="InstallCU.bat"
;!@InstallEnd@!
InstallCU.bat 文件启动 PowerShell:
powershell.exe -ExecutionPolicy Unrestricted -File InstallCU.ps1
在 powershell 脚本中我做了很多事情,包括检查此分支下的某些注册表项:
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components
使用 Test-Path 和 Get-ItemProperty cmd-lets
我没有测试过,但我认为在 32 位计算机上一切都会正常运行。
我的问题是,在 64 位系统上,32 位 (x86) 版本的 PowerShell 启动。当我访问注册表中 HKLM:\Software 下的任何路径时,它会被重定向到 HKLM:\Software\Wow6432Node\,当然,无法找到我需要的信息(因为它位于 64 位注册表分支中)
问题:
1) 如何制作 64 位 7-zip SFX?
或者
2)如何从 32 位 SFX 运行 64 位 PowerShell?
或者
3) 如何通过 32 位 powershell 读取 64 位注册表(不是 Wow6432Node)?(虽然我认为这是不可能的,或者会大大增加 PowerShell 代码的数量)
或者
还有其他建议吗?
答案1
以下是用于确定 OS 位数 + Powershell 位数的嵌套 Archetype 函数。sysnative
在变量中添加路径以注册表编辑器因此您可以从 32 位进程中编辑 x64 键。如果您不喜欢 reg.exe,我相信还有其他方法可以实现相同的效果。
Function ARCHETYPE (){
$ARCH = (Get-WmiObject -class Win32_OperatingSystem | Select-Object OSArchitecture).OSArchitecture
If ($ARCH -eq '64-bit') {
$DOUBLEARCHES = (Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"]
If ($DOUBLEARCHES -eq 'x86') {
Write-Host 'Running 32-bit PowerShell on 64-bit Windows'
$REG = "%WINDIR%\sysnative\reg.exe"
}
ElseIf ($DOUBLEARCHES -eq 'amd64') {
Write-Host 'Running 64-bit PowerShell on 64-bit Windows'
$REG = "%WINDIR%\system32\reg.exe"
}
}Else{
Write-Host 'Running 32-bit PowerShell on 32-bit Windows'
$REG = "%WINDIR%\system32\reg.exe"
}
Write-Host "$REG"
}
ARCHETYPE
结果
Running 64-bit PowerShell on 64-bit Windows
%WINDIR%\system32\reg.exe
或者
Running 32-bit PowerShell on 64-bit Windows
%WINDIR%\sysnative\reg.exe
答案2
可能太晚了,但值得让其他人知道,有一个模块“7zsd_All_x64.sfx”,将其添加到您的配置文件和存档中,您将拥有一个 64 位