计划任务中的Word Interop未能工作

10

我正在开发一个脚本,它可以将Word文档打开并转换成PDF格式。在我的电脑或服务器上手动运行时一切正常。但是当我尝试将其作为定时任务运行时出现问题。

其中一个要求是每晚无需干预地执行此操作。当我设置计划任务来完成这个操作并将安全选项设置为“仅在用户登录时运行”时,一切都正常。但问题是,不管有没有人登录,都必须运行此脚本。如果我将任务设置为“无论用户是否登录都运行”,则脚本会在以下行上失败:

wordDoc = MSWord.Documents.Open(ref fileToConvert, ref refFalse, ref refTrue, 
                                ref RN, ref RN, ref RN, ref RN, ref RN,
                                ref RN, ref RN, ref RN, ref RN, ref RN,
                                ref RN, ref RN, ref RN);

MSWord.Documents.Open()可以使用,但会返回null。

此任务在安装有Office 2007的Windows Server 2008上运行。

是否应该采用其他方法?


我曾经遇到完全相同的问题,花费了很长时间来尝试解决它,进入了各种死胡同,最终我得出的“解决方案”是:不要使用Windows Server 2008。如果您找到了解决方案,我将洗耳恭听。 - Gary McGill
如果您没有使用Server 2008,它是否能正常工作? - Steve Platz
在Windows 2003服务器或者XP上,是的。对于Vista不确定。 - Gary McGill
2个回答

26

我在Windows Server 2008下从Windows服务自动化Office时遇到了问题,尽管在Windows Server 2003下运行良好。问题也发生在打开调用时,虽然它实际上会引发异常而不是简单地返回null。无论如何,您可能需要尝试这个...

我尝试按照H Ogawa在这个MSDN线程中给出的建议,并且似乎起作用了。这很奇怪,但要赞扬Ogawa先生的发现。

'Ogawa Hack'的概括:为系统配置文件夹创建桌面文件夹,作为其中之一

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

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

...取决于您是否使用64位Windows。

此外,无论哪个用户“驱动”Office,该文件夹都需要写入权限。

[编辑:更正了链接URL]


1
谢谢你的回复。我会尽快查看。如果有效,我会回复的。 - Steve Platz
3
对我而言这个方法行得通,但我必须将该用户添加到本地管理员组,并勾选“使用最高权限运行”的选项。 - Bruno Gomes
太厉害了,我甚至不知道是怎么被发现的。就像魔法一样有效 :) - suryakiran
是的,这对我也起作用了。我已经苦苦挣扎了5个小时,创建那个文件夹就解决了问题... - Rahul Jain
我非常希望这对我有用。但它在Win Server 2012或2016上没有任何作用。 - Tsar Bomba
显示剩余3条评论

4
我相信许多人已经尝试过类似于您正在尝试的事情并且失败了。有很多关于无法以服务器模式(非交互式等)运行任何基于Office Interop的解决方案的讨论。
请参见这里这里
我知道这可能不是您想要的答案,但这就是现实!

我一直在寻找答案。我在谷歌上进行了大量搜索,但没有找到任何关于正在发生的事情的信息,所以感谢您的回复。我会再等几个小时,如果没有“解决方案”被发布,我将把您的回复标记为答案。 - Steve Platz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接