我需要使用Python 3打开一个注册表配置单元文件。这应该在Windows系统上以及从另一个系统复制的配置单元文件中实时工作。
不幸的是,我无法使用Python打开甚至查看文件:
#!/usr/bin/env python3
import os.path
import os
hive_dir = os.path.join(os.path.expandvars(r"%SystemRoot%"), "System32", "Config")
HIVES = ["System", "San", "Security", "Software", "Ntuser.dat"]
def main():
print("Hive directory {} exists: {}".format(hive_dir, os.path.exists(hive_dir)))
print("Content of {}: {}".format(hive_dir, os.listdir(hive_dir)))
for hive in HIVES:
hive_path = os.path.join(hive_dir, hive)
print("{} exists: {}".format(hive_path, os.path.exists(hive_path)))
if __name__ == '__main__':
main()
该脚本首先检查hive文件所在的目录以及文件是否实际存在。输出是:
Hive directory C:\WINDOWS\System32\Config exists: True
Content of C:\WINDOWS\System32\Config: ['Journal', 'RegBack', 'systemprofile', 'TxR']
C:\WINDOWS\System32\Config\System exists: False
C:\WINDOWS\System32\Config\San exists: False
C:\WINDOWS\System32\Config\Security exists: False
C:\WINDOWS\System32\Config\Software exists: False
C:\WINDOWS\System32\Config\Ntuser.dat exists: False
根据Microsofts MSDN documentation,文件应该在那里并在Windows资源管理器中打开目录shows files。
使用PowerShell,我还可以验证文件是否到位:
PS C:\Users\test> dir "$env:SystemRoot\System32\Config"
Verzeichnis: C:\WINDOWS\System32\Config
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 05.12.2016 13:38 bbimigrate
d----- 16.07.2016 13:47 Journal
d----- 14.03.2017 10:19 RegBack
d----- 05.12.2016 13:19 systemprofile
d----- 16.03.2017 10:14 TxR
-a---- 16.03.2017 10:16 1048576 BBI
-a---- 05.12.2016 13:15 28672 BCD-Template
-a---- 20.03.2017 09:32 91488256 COMPONENTS
-a---- 16.03.2017 10:16 1572864 DEFAULT
-a---- 16.03.2017 12:16 5259264 DRIVERS
-a---- 05.12.2016 14:02 32768 ELAM
-a---- 20.03.2017 09:22 120 netlogon.ftl
-a---- 05.12.2016 13:12 73728 SAM
-a---- 16.03.2017 10:16 73728 SECURITY
-a---- 16.03.2017 10:16 103022592 SOFTWARE
-a---- 16.03.2017 10:16 19136512 SYSTEM
-a---- 05.12.2016 12:39 8192 userdiff
-a---- 16.07.2016 13:45 4096 VSMIDK
PS C:\Users\test> Test-Path "$env:SystemRoot\System32\Config\SECURITY"
True
我正在运行64位Windows 10 Enterprise和Python 3.5。我验证了生产系统以及虚拟机上的行为。以管理员身份运行Python并没有改变任何内容。
这里有什么问题?
答案 0 :(得分:2)
由于WOW64文件系统重定向,您正在运行32位Python并查看SysWOW64\config
。在64位Windows上运行的32位进程可以以"%SystemRoot%\SysNative"
的形式访问本机系统目录。此目录是虚拟的,在本机进程中不存在,因此请首先检查它是否存在。
另外,“San”是一个错字;它应该是“SAM”。并且系统配置目录中不应该有“NTUSER.DAT”。该文件仅存在于用户配置文件目录中。