我的目标
我正在尝试为Plex媒体服务器创建一个插件,该插件将与WMP (Windows )接口,以获取有关Windows项的元数据。
设置
什么起作用?
从Python到基于COM的WMP访问的整个链都在工作。如果我启动Plex Media (Python2.7的一个版本)附带的嵌入式Plex脚本主机,我可以很容易地从WMP访问数据。这意味着链中的下列链接都在工作:
什么不管用?
激活这个链的COM Interop部分在沙箱Plex插件中不起作用。同样,这个插件是用标准Python编写的,但是一旦沙箱代码运行,Python执行环境就会有一些微妙的不同。在插件中运行WMP访问代码时,我会得到以下异常:
COMException: Exception from HRESULT: 0xC00D1327
at WMPLib.IWMPPlayer4.get_mediaCollection()问题
也许我至少应该赢得一些奖励,因为我找到了一个问题,这个问题以一种独特的、令人困惑的方式交叉了这么多不同的技术。
编辑1
由于@Paulo的建议,我已经完全排除了任何与.NET相关的问题。现在,我正在通过WMPLib库与comtypes进行所有互操作。现在,我得到了以下错误:
COMError: (-1072884953, None, (None, None, None, 0, None))虽然-1072884953是一种不同的错误代码,但稍微仔细研究一下,就会发现该错误与(可能相当于?)相关。与我通过.NET互操作时遇到的相同错误(这个职位使它看起来是这样)。
所以现在我所坚持的事实是:
wmp.dll在所有情况下都在加载( @Paulo帮助我理解了下面的内容)。NS_E_CURL_INVALIDPATH: The URL contains a path that is not valid.,在大多数情况下,这个错误似乎与尝试回放有关。wmp.mediaCollection打电话因此,Plex沙箱似乎确实是这个场景中的关键。还有更多的想法吗?
编辑2
至少,这是失败所需的代码:
from comtypes.client import CreateObject
wmp = CreateObject("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
collection = wmp.mediaCollection错误发生的地方就是collection = wmp.mediaCollection。
因此,实际上没有任何参数被传递给可能导致故障的参数。重申一下,这段代码在一般Python2.7上下文中运行良好。它只在Plex插件沙箱中失败。我不知道如何获得Plex沙箱如何改变执行环境的详细信息。我想我的答案就在那个方向。
发布于 2014-07-17 16:20:44
让我直截了当,如果我错了就纠正我:
让我们澄清这一点:
NS_E_CURL_INVALIDPATH:
URL包含无效的路径。这似乎是一个合法的对象错误,而不是COM错误。
现在,关于以下问题:
编辑:您是否提供了一个文件名(例如,file:///C:/path/to/file.mp4),),其中需要一个URL (反之亦然)?我想您必须显示失败的代码和正在提供的值。
https://stackoverflow.com/questions/24729976
复制相似问题