Com 作为服务运行时,调用WordApplication.Open with VB6失败

Com 作为服务运行时,调用WordApplication.Open with VB6失败,com,vb6,ms-word,Com,Vb6,Ms Word,我正在使用此代码打开Word文档: Dim Word as Object, Doc as Object Set Word = CreateObject("Word.application") if not (Word is nothing) then set Doc = Word.Documents.Open("C:\temp\testfile.doc") if not (doc is nothing) then doc.close false set doc = not

我正在使用此代码打开Word文档:

Dim Word as Object, Doc as Object
Set Word = CreateObject("Word.application")
if not (Word is nothing) then
  set Doc = Word.Documents.Open("C:\temp\testfile.doc")
  if not (doc is nothing) then
    doc.close false
    set doc = nothing
  end if
  Word.Quit
  set Word = nothing
End if
我将它编译成exe,当以交互方式或作为服务在我的测试机器(WindowsServer2008R2和Office2007)上运行时,它工作正常。但在另一台具有相同操作系统和相同Word版本的服务器上,只有交互运行exe时,它才能正常工作。一旦我把它作为一种服务来运行,线路

set Doc = Word.Documents.Open("C:\testfile.doc")
失败,错误为“需要对象”

我尝试了以下方法:

  • 使用服务帐户本地系统
  • 将服务配置为使用与我登录时相同的用户帐户
  • 使用set Doc=Word.Documents.Add打开新的空文档效果良好
  • 我使用/r参数运行Word来修复它,还使用了/RegServer
  • 已检查/关闭病毒扫描程序(MS Security Essentials)
没有成功。
有人有想法吗?

您可能需要使您的服务与桌面交互。请参见

中的屏幕截图。有时,您可以先在运行服务的同一帐户下运行命令提示符(或类似命令提示符)(以交互方式),然后启动所需的所有应用程序,从而使这些功能正常工作。但是,归根结底,MS不支持从服务中自动发送文字,因此您正处于失败的道路上(即使您今天还没有达到这一点)。您应该研究服务器端解决方案来生成所需的文件,而不必尝试自动执行Word。Hans,在生产代码中,我也没有检查Word对象,所以不是这样。将文件转储到启动驱动器的根目录中也是一个考虑因素。这不是用户数据可接受的位置。上面的示例只是一个示例-实际文件不存储在根目录中,而是存储在%temp%文件夹中。我还使用用户的documents文件夹中的文件对其进行了测试,但似乎与文件的位置无关。