有谁知道如何让MS Office 2007 .NET C#Interop库与Vista一起使用?
我有一个.NET C#应用程序,我已将其设置为作为Windows服务运行。该程序将根据情况打开Word或Excel模板并修改其内容,然后将文档保存回来。当我在使用Office 2007的Windows Server 2003或XP计算机上执行此操作时,所有这些都很有效。当我将所有内容移动到Server 2008框时,一切都退出了工作。例如,在Excel中,我收到一个COM异常,告诉我当文件显然存在时无法打开Excel文件,我可以手动打开它。 Windows服务在我登录计算机的同一用户帐户下运行,该帐户是管理员。
有谁知道该怎么做?
答案 0 :(得分:2)
在Vista和Windows Server 2008上,服务运行在一个名为Session0的东西中。在Vista之前,常规程序将在Session0中与服务一起运行。
这意味着Session0已成为无桌面的荒地,您的服务甚至无法访问explorer.exe。我很确定问题是Office应用程序希望能够访问通常在桌面上的一些组件。
由于Excel,Word等仅在桌面会话中受支持,因此您只有几个选择:
答案 1 :(得分:1)
我确实发现微软的interesting article基本上说不做Office自动化。
答案 2 :(得分:1)
在您的系统上安装它并在您的解决方案中引用excel dll,希望它能够正常工作。
答案 3 :(得分:1)
您应该避免将Office客户端作为服务器端应用程序运行。考虑使用xml作为文件格式(对于Office 2007使用xlsx,或者对某些旧版本使用Excel工作簿xsd。)然后,您将无法在服务器上使用Excel API。
答案 4 :(得分:0)
您是否在服务器上安装了主互操作程序集?这些通常位于GAC中,在构建程序时不包含在bin目录中,因此需要在服务器上本地安装它们。
答案 5 :(得分:0)
这只是猜测,但可能是UAC。我知道特权(管理员)应用程序和用户应用程序不能相互发送消息或以任何方式进行通信。您的服务以管理员身份运行,但您的桌面在UAC下以普通用户身份运行,即使他们是同一个用户。我还希望Office在启动时启动(预加载)部分,并且将作为普通用户运行。
尝试关闭UAC并查看是否有帮助。如果是这样,至少你知道它是什么。
答案 6 :(得分:0)
您是否已将帐户登录到本机? Office不是服务器端应用程序,如果您尝试在没有桌面环境的情况下启动任何可执行文件,则会出现随机错误。
答案 7 :(得分:0)
要记住关于Office的事情。它只是x86,所以如果你在x64中创建一个应用程序,你将无法访问Office底层的COM对象。您将需要在x86中编译您的应用程序,然后它才能工作。
您可以通过进入项目的属性,然后在visual studio的构建选项卡下选择x86来实现。
这是假设您的应用程序正在x64环境中开发/运行。