[英]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 位於同一位置(這就是它首先執行所有復雜操作的原因)。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.