簡體   English   中英

如何在 Python 中獲取 Windows 中已安裝程序的路徑

[英]How to get in Python the path to a installed program in windows

我正在用 Python 編寫一個腳本,它在 Windows 終端中調用 Ghostscript。

我需要獲取程序在 Windows 中安裝的路徑(例如 Ghostcript)

是否有任何環境變量或任何其他方法(系統注冊表)來獲取路徑?

解決方案(來自@abernert 回答:)

    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 32 位系統。

你所要求的一般是不可能 Windows 找不到任意安裝的程序。 但它可能適用於任何特定的應用程序,包括 Ghostscript。

通過 .msi 機制安裝的程序或與“添加/刪除程序”中的“卸載”機制交互的其他程序,您可以找到相關條目。 但是具有自己的自定義安裝程序和卸載程序的程序不必這樣做。

可以通過這些關聯找到添加“文件類型關聯”的程序(例如,如果您雙擊一個.ps文件,Windows 就知道如何打開它)。

當然,許多程序會安裝自己的任意注冊表項,您可以隨時搜索這些注冊表項。

如果您查看Ghostscript 安裝文檔,它會稍微解釋一下它的作用。 我認為簡短的版本是:

  • 有一個選項可以將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模塊。

您可以通過以下方式獲取 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM