0

我们正在尝试创建一组服务,其中一些使用 powerpoint。由于我们使用 python 编写软件,服务使用 COM API 连接到 powerpoint。基本代码如下:

mutex = win32event.CreateMutex(None, False, 'mutexuniqueid')
if mutex is None:
    raise Exception('Mutex could not be created: %d' % (win32api.GetLastError()))
win32event.WaitForSingleObject(mutex, win32event.INFINITE)
try:
    pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)
    try:
        powerpoint = win32com.client.DispatchEx('Powerpoint.Application')
        presentation = powerpoint.Presentations.Open(r'Path\To\Cached\Presentation.ppt', False, True, False)
        # Do whatever necesary with the presentation
        presentation.Close()
        del presentation
finally:
    win32api.CloseHandle(mutex)

如果我们运行程序,它基本上是一个 rpc 服务器,从命令提示符下一切正常,但如果我们将程序安装为服务,它会在powerpoint.Presentations.Open调用过程中失败并出现错误:

(-2147352567, 'Exception occurred.', (0, u'Microsoft PowerPoint 2010', u'PowerPoint could not open the file.', u'', 0, -2147467259), None)

我们已经跟踪问题并且所有的 COM 查询都正确执行,我们在Open那里有函数,所以它在 powerpoint 中执行期间确实失败了。

有一个问题,我们已经在至少 10 台计算机上进行了尝试,它在每台计算机上都显示出相同的问题,除了一台(恰好是我的)。我们检查了这些机器和我自己的机器有什么区别,但到目前为止什么都没有。

更新 检查了不同的计算机后,我们假设问题与会话 0 隔离(服务在会话 0 中运行)有关。中断的进程似乎也没有登录会话,而工作的机器确实显示了一些登录会话,即使它们也在会话 0 中运行。

4

1 回答 1

1

所以,这个问题似乎以前发生过,解决方案不是我所期望的。完整的答案在这里,但基本上,您只需要确保这些文件夹存在:

C:\Windows\System32\config\systemprofile\Desktop

C:\Windows\SysWOW64\config\systemprofile\Desktop

还需要读写权限。

于 2013-06-07T13:43:04.153 回答