COMException从Plex插件访问WMP(使用Python for.NET) 我的目标
我正在尝试创建一个插件,该插件将与WMP(Windows Media Player)接口,以获取有关Windows Media library项目的元数据 设置COMException从Plex插件访问WMP(使用Python for.NET) 我的目标,python,.net,com,wmp,plex,Python,.net,Com,Wmp,Plex,我正在尝试创建一个插件,该插件将与WMP(Windows Media Player)接口,以获取有关Windows Media library项目的元数据 设置 PMS使用Python 2.7作为其主脚本主机。Plex插件是 用Python编写,但它们是以沙盒容量运行的。不幸的是,关于这个沙盒功能的边界究竟是什么的文档很少 我决定使用Python for.NET访问Windows SDK以与WMPLib接口。 Python for.NET()是一种Python 用于从中访问.NET程序集功能的
- PMS使用Python 2.7作为其主脚本主机。Plex插件是 用Python编写,但它们是以沙盒容量运行的。不幸的是,关于这个沙盒功能的边界究竟是什么的文档很少
- 我决定使用Python for.NET访问Windows SDK以与WMPLib接口。 Python for.NET()是一种Python 用于从中访问.NET程序集功能的库 Python运行时李>
- 我创建了一个.NET程序集来访问WMPLib 是Windows SDK的一部分,设计用于以编程方式访问 WMP的功能。WMPLib基本上是 .NET目标wmp.dll
- Python正在为.NET加载Python
- Python for.NET正在加载我的.NET程序集
- 我的.NET程序集正在加载WMPLib(Interop.WMPLib.dll,用于COM互操作的.NET程序集)
- WMPLib正在成功打开并使用wmp.dll(从C:\Windows\System32访问)
COMException: Exception from HRESULT: 0xC00D1327
at WMPLib.IWMPPlayer4.get_mediaCollection()
- 在这个场景中,我知道Python for.NET正在工作,因为此时我已经从我的.NET程序集中加载并访问了其他东西
- C:\Windows\System32位于PATH变量的前面。我假设COM DLL应该通过PATH环境变量定位(似乎是这样说的),但我并不完全确定这一点在这个独特的场景中(Python访问.NET访问COM),COM程序集应该如何定位是我最大的未知数之一
comtypes
Python库与WMPLib
进行所有互操作。现在我得到了以下错误:
COMError: (-1072884953, None, (None, None, None, 0, None))
虽然-1072884953
是一个不同的错误代码,但仔细研究一下就会发现,这个错误似乎与我通过.NET interop时遇到的同一个错误有关(可能相当于?)
所以现在我要面对的事实是:
wmp.dll
在所有情况下都在加载(这是@Paulo帮我弄明白的)
在下面)NS\u E\u CURL\u INVALIDPATH:URL包含无效的路径。
在大多数情况下,此错误似乎与尝试播放有关wmp.mediaCollection
from comtypes.client import CreateObject
wmp = CreateObject("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
collection = wmp.mediaCollection
发生错误的地方是collection=wmp.mediaCollection
因此,实际上没有传递任何可能导致失败的参数。重申一下,这段代码在一般Python 2.7上下文中运行良好。它只在Plex插件沙盒中失败。我不知道如何获得Plex沙盒如何改变执行环境的详细信息。我想我的答案就在这个方向上n、 让我直说,如果我错了,请纠正我:
- 您有一个正在运行的Python2.7实例,Plex Media Server
- 您正在使用Python for.NET库将.NET加载到进程中
- 您正在.NET中加载WMPLib(一个导入的COM互操作程序集),以便通过Python for.NET使用Windows Media Player库
- : URL包含无效的路径 这似乎是一个合法的对象错误,而不是COM错误
- 与此无关,因为wmp.dll是在每个提供的类的注册表项下使用完整路径注册的,这才是最重要的 事实上,正如您所说,如果您已经达到了这一点,那么加载.NET程序集或COM找不到DLL显然不是问题