import wmi
w = wmi.WMI()
for p in w.Win32_Product():
if 'Box, Inc.' == p.Vendor and p.Caption and 'Box Sync' in p.Caption:
print 'Installed {}'.format(p.Version)
import os
import winapps
import subprocess
def getPossibleExePaths(appPath):
if not appPath:
raise Exception("App Path cannot be None")
pattern = appPath + ":*exe"
try:
returned = subprocess.check_output(['where', pattern]).decode('utf-8')
listOfPaths = filter(None, returned.split(os.linesep))
return [i.strip() for i in list(listOfPaths)]
except subprocess.CalledProcessError as e:
raise Exception(f"Error getting path for '{appPath}'")
def getAppPath(appName):
for app in winapps.search_installed(appName):
installPath = str(app.install_location)
if installPath and installPath != "None":
return installPath
return None
if __name__ == '__main__':
print(getPossibleExePaths(getAppPath('Chrome')))
4条答案
按热度按时间8nuwlpux1#
没有简单的方法,但是你可以使用类似winapps的东西,如果程序存在的话,它会让你得到程序的安装目录。然而,困难的部分是知道哪个文件将执行程序。
您可以使用wmi通过从winapps传递信息来获取位置;类似于这个this answer,但可能是过时的,所以有一个看看通过/docs/。
gt0wga4j2#
从卢坎的回答中,我得到了这个代码:
对不起,但我想不出来,应用程序的名称到底在哪里?
g6baxovj3#
已经有很多好的工具可以做到这一点。
以下是您可以尝试实施的常见解决方案:
wmi
或其他方法读取可执行信息,如其他答案所述。)subprocess
或其他函数/lib运行您刚刚找到的记录的可执行文件。kiayqfof4#
我已经写了下面的代码,它使用了我之前的答案中建议的
winapps
。这个实现有很多限制,比如它只适用于为所有用户安装的程序。但是,你可以修改这个代码,使用另一种方法来获得安装位置,并使用getPossibleExePaths
来获得可执行文件。This answer给出了一些可能比winapps
更好的替代方法。此代码使用Windows的
where
命令,因此无法跨平台运行。但是,请注意
getPossibleExePaths
将返回一个可执行文件路径列表,而不一定是启动进程的可执行文件。您需要弄清楚您的程序将如何处理这个问题,没有简单的方法可以将uninstaller.exe
与launchApp.exe
区分开来。当然,您可以匹配winapps
提供的卸载位置,并将其从返回列表中排除,但这无法解决它可能不是启动可执行文件的问题。希望这对你有帮助