无法访问excel文件

时间:2012-12-26 07:30:49

标签: c# excel windows-services interop

我正在开发一个Windows服务,生成一个报告。此报告有一个模板。此模板在excel文件中准备。此文件将复制到输出文件夹。

在开发过程中,我像控制台应用程序一样启动了服务,并且在访问此文件时没有任何问题。

然后我准备了一个服务安装程序。该服务安装在Local System帐户下。因此,此excel模板文件标记为 content ,并与可执行文件一起复制到安装目录。

但是当服务启动时,excel似乎无法访问此文件。该服务已安装到c:\Program Files (x86)\Our Company\Service Name\。目标操作系统是Windows Server 2008.在测试时,我使用Windows 7并遇到同样的问题。

我使用以下代码访问excel。

using Excel = Microsoft.Office.Interop.Excel;    
//...
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
//the following line throws an exception
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(@"path"); 

我还试图将excel模板文件复制到一些临时目录(服务有权写入 - 这是经过测试的)并尝试从那里打开它,但没有成功(虽然这个变体在控制台应用程序)。

错误消息sais:

  

Microsoft Office Excel无法访问文件/路径/。   有几个可能的原因:

1. The file name or path does not exist.
2. The file is being used by another program.
3. The workbook you are trying to save has the same name as a currently open workbook.

如何让Windows服务访问此Excel模板文件?或者还有另一种选择吗?

3 个答案:

答案 0 :(得分:10)

要使用本地系统帐户在用户服务下安全运行Office应用程序(Excel和其他),您必须知道两件重要的事情: 1)在Windows Server 2008/2008 R2中,您必须手动创建两个文件夹:         C:\ WINDOWS \ system32 \设置\ systemprofile \桌面
        C:\ Windows \ SysWow64 \ config \ systemprofile \ desktop(仅适用于x64版本)    如果没有此文件夹,则无法更正本地SystemAccount

中的运行办公室应用程序

2)如果您的服务配置没有桌面交互,那么在第一次启动的办公应用程序(例如Excel)冻结用户凭据对话框 - 您无法在此模式下看到此窗口 - 要解决此启用desctop交互,切换到服务运行后的办公室窗口并手动输入凭证。

其他信息there(使用Google翻译阅读)。

答案 1 :(得分:7)

有一篇名为Considerations for server-side Automation of Office的详细MS知识库文章。一些关键摘录:

  
      
  • 用户身份:Office应用程序在运行应用程序时会假定用户身份,即使自动化启动时也是如此   应用。应用程序尝试初始化工具栏,菜单,   选项,打印机和一些基于用户设置的加载项   启动应用程序的用户的注册表配置单元。很多服务   在没有用户配置文件的帐户下运行(例如SYSTEM   帐户或IWAM_ [servername]帐户)。因此,Office可能不会   在启动时正确初始化。在这种情况下,Office返回一个   CreateObject函数或CoCreateInstance函数上的错误。   即使可以启动Office应用程序,其他功能也可能不启动   如果不存在用户配置文件,则可以正常工作。

  •   
  • 与桌面交互:Office应用程序假定它们在交互式桌面下运行。在一些   在某些情况下,可能需要使应用程序可见   自动化功能正常工作。如果发生意外错误,   或者如果需要一个未指定的参数来完成一个函数,   Office旨在通过模式对话框提示用户   询问用户用户想要做什么。一个模态对话框   非交互式桌面不能被解雇。因此,那个线程   无限制地停止响应(挂起)。虽然有一定的编码   这些做法可以帮助减少这个问题的可能性   实践不能完全阻止这个问题。 这个事实本身就是这样   从服务器端环境运行Office应用程序风险和   不支持的。

  •   

显然,正如评论中指出的那样,使用SYSTEM帐户是一个错误。您需要在具有用户配置文件的帐户下运行该服务。

但即使你解决了这个问题,另一个要点就会杀了你。 Office应用程序确实假设它们在交互式桌面下运行。我的建议是放弃尝试从服务自动化Office。请使用像Aspose这样的库。或者在交互式桌面上运行该过程。

答案 2 :(得分:0)

我只是遇到了同样的问题。

我制作了一个.bat文件,我在其中将其称为.exe文件。

最后,我从任务计划程序操作中调用了.bat文件。

一切正常。