从Vista上的NT服务运行时,Excel COM对象的文件访问失败

时间:2008-11-15 04:22:34

标签: c# .net com windows-vista vbscript

我们使用COM对象访问NT服务中的excel电子表格(通过Windows Scripting Host)。在Vista之前,这种方法非常好用,但从Vista开始,我们收到了这个错误:

Microsoft Office Excel无法访问文件“c:\ myfiles \ test.xls”。有几个可能的原因:

  • 文件名或路径不存在。
  • 该文件正由另一个程序使用。
  • 您尝试保存的工作簿与当前打开的工作簿具有相同的名称。

我尝试更改NT服务登录设置以使用我自己的帐户,管理员帐户和本地系统。我查看了本地安全策略,但没有找到任何内容。我花了几天时间搜索Microsoft KB无济于事。

如果脚本是从控制台应用程序执行的,那么它可以正常工作。该文件打开并处理没有问题。只有在服务上下文中执行时才会出现错误。

如果该服务在Windows XP或Server 2003 SP1上运行,它也可以正常工作。只有在Vista上它才会失败(我们现在已经收到有关它在Server 2003 SP2中失败的报告)!

代码,它的价值非常简单:

dim xl_app
Set xl_app = CreateObject("Excel.Application")
xl_app.Workbooks.Open mypath,0,1

我怀疑这个人可能遇到了同样的问题: http://bytes.com/forum/thread819740.html

2 个答案:

答案 0 :(得分:1)

还有一些问题:

  • 您使用的是哪个版本的Excel?
  • 您是否尝试过使用提升权限运行服务?

答案 1 :(得分:0)

我有点“解决了这个问题”。如果您使用“dcomcnfg”更改帐户以将Excel应用程序启动到用户帐户或“交互式用户”,则从该服务启动的Excel将在该帐户中启动,现在它可以访问文件系统。

问题是这是一个全局设置。如果您使用: *“此用户”:然后excel总是打开该用户并且总是打开,在会话0中没有UI,即使交互式使用excel也是如此。 IE总是看不见的。 *“交互式用户”:现在excel总是在交互式用户帐户中启动,我认为这不会适用于在没有交互式用户的情况下启动时启动的服务。

必须有一些安全设置。我希望其他人有其他想法。