IronPython - 脚本和可执行文件的不同输出

时间:2014-07-14 11:42:03

标签: windows registry ironpython

我创建了一个小型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

1 个答案:

答案 0 :(得分:0)

当你说脚本时,我认为你的意思是使用ipy.exe wmi_test.py。 ironpython附带的ipy.exe是一个32位可执行文件(出于各种原因);使用pyc.py构建的可执行文件是AnyCPU,这对您来说意味着64位。 Windows对32位和64位程序有不同的注册表。

检查是否是这种情况的简单方法是使用ipy64.exe运行脚本并比较结果。