如何在Python中获取Windows中已安装程序的路径

时间:2014-10-13 18:00:23

标签: python windows installation exe

我正在用Python编写一个scritp,在windows终端中调用Ghostscript。

我需要获取在Windows中安装程序的路径(例如Ghostcript)

有任何环境变量或任何其他方法(系统注册表)来获取路径吗?

解决方案(来自@abarnert回答:)

    import winreg

    program_to_found = 'Software\\GPL Ghostscript'

    try:
        h_key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, program_to_found)
        try:
            gs_version = winreg.EnumKey(h_key, 0)
            h_subkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, program_to_found+'\\'+gs_version)
            gs_dll = (winreg.EnumValue(h_subkey,0))[1]
            print("Ghostscript %s is installed in: %s" % (gs_version, gs_dll.replace('gsdll32.dll', '')))
        except OSError:
            print("Ghostscript insn't correctly installed!! ")
    except PermissionError:
        print("Ghostsript not found!! ")

适用于winXP和win7 32bit系统。

2 个答案:

答案 0 :(得分:2)

你要求的是一般。 Windows找不到任意安装的程序。但它可能适用于任何特定的应用程序,包括Ghostscript。

由.msi机制安装的程序或与“添加/删除程序”中的“卸载”机制交互的其他程序,您可以找到该条目。但是具有自己的自定义安装程序和卸载程序的程序不必执行此操作。

添加“文件类型关联”的程序(例如,如果双击.ps文件,Windows知道如何打开它)可以通过这些关联找到。

当然,许多程序都安装了自己的任意注册表项,您可以随时搜索这些注册表项。

如果你看一下Ghostscript installation docs,它会解释一下它的作用。我认为简短的版本是:

  • 可以选择将GS.EXE所在的目录添加到%PATH% - 但在您的情况下,很明显,它不存在。
  • 可以选择将GS.EXE的路径注册为至少.ps个文件的文件类型关联,除非已经拥有其他内容。
  • GSDLL32.DLL的路径可以在GS_DLL环境变量中找到,也可以在HKCU\Software\GPL Ghostscript\#.##HKLM\Software\GPL Ghostscript\#.##中找到(其中#.##是主要和次要的版本号)。当然,不能保证DLL和EXE位于同一位置(这就是为什么它首先完成所有复杂的东西)。
  • 使用Windows卸载程序机制注册卸载程序的路径。当然,不能保证GS.EXE与卸载程序位于同一目录中。

由于几乎所有这些都是可选的,因此需要花费多少精力来尝试所有不同的可能性。

要从Python访问这些注册表项,请参阅stdlib中的_winreg模块。

答案 1 :(得分:0)

您可以通过以下方式获取GhostScript bin文件夹的路径:

from winreg import OpenKey, QueryValue, EnumKey, HKEY_LOCAL_MACHINE, KEY_READ

def get_ghostscript_path():  # function returns Ghostscript bin folder path
        key = r'SOFTWARE\Artifex\GPL Ghostscript'
        sub_key = OpenKey(HKEY_LOCAL_MACHINE, key, access=KEY_READ)
        return QueryValue(HKEY_LOCAL_MACHINE, f'{key}\\{EnumKey(sub_key, 0)}') + r'\bin'