我创建了一个小型IronPython脚本,列出了Windows PC中所有已安装的软件。
import _winreg
def subkeys(key):
i = 0
while True:
try:
subkey = _winreg.EnumKey(key, i)
yield subkey
i+=1
except:
break
def traverse_registry_tree(key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"), tabs=0):
output = []
for k in subkeys(key):
meep = _winreg.OpenKey(key,k)
if _winreg.QueryValueEx(meep,"DisplayName")[0] == None:
string = str(k)
else:
string = str(_winreg.QueryValueEx(meep,"DisplayName")[0])
output.append('\t'*tabs + string)
traverse_registry_tree(k, tabs+1)
output.sort()
return output
output_file = open("output.txt",'w')
for line in traverse_registry_tree():
tmp = line + '\n'
output_file.write(tmp)
output_file.close()
使用以下选项对其进行编译后:
/main:wmi_test.py /out:test /embed /standalone /target:winexe
我从可执行文件生成了output.txt,从脚本生成了output.txt。然而,他们之间有很大的不同: http://www.diffchecker.com/wfbh79af
以下是"卸载软件"在Windows配置中心中: http://jschpp.de/software.png
你能帮助我理解为什么会有这么大的差异。
我在Windows 7 Professional x64上使用IronPython 2.7
答案 0 :(得分:0)
当你说脚本时,我认为你的意思是使用ipy.exe wmi_test.py
。 ironpython附带的ipy.exe
是一个32位可执行文件(出于各种原因);使用pyc.py
构建的可执行文件是AnyCPU,这对您来说意味着64位。 Windows对32位和64位程序有不同的注册表。
检查是否是这种情况的简单方法是使用ipy64.exe
运行脚本并比较结果。