我有一个用 c# 编写的 .net 控制台应用程序,它在 Visual Studio 中运行以及单击文件系统中的 .exe 文件时完全符合它的要求。它像魅力一样运行。但是,当我在我的 Windows 7 开发机器或 Windows 2008 R2 生产机器中创建计划的 Windows 任务时,它无法执行应用程序的最后一步。此步骤是在后台打开 .doc 并将其转换为 .docx(只需运行另存为)。
该应用程序旨在访问网络路径,创建一个名为 ~Converted 的目录,它没有问题,然后对于它发现它在后台打开的每个 .doc,执行另存为,然后他们将 do 的 .docx 版本保存在 ~转换目录。我相信代码没有任何问题,因为它在计划任务之外构建和运行时没有问题。我已经探索了任务中的每个设置,进行了更改并重新测试,但没有成功。我正在使用属于管理员组的用户运行它,IMO 权限不是问题。我用 NETWORK SERVICE 帐户尝试过,结果相同。
仅在通过计划任务运行时才生成的实际堆栈跟踪错误是:
System.UnauthorizedAccessException:由于以下错误,检索具有 CLSID {000209FF-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:80070005 访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。
执行此操作的代码行是:
Application oWord = new Application();
我已经搜索了几个小时,但没有发现任何帮助。当代码打开/初始化 word doc 时,似乎通过任务运行代码会导致 COM 访问问题。该任务在具有完全管理员权限、以最高权限运行以及用户是否登录时都很有趣。正如我所说,所有这些设置都已使用,但并没有什么不同。
它现在已经到了一个阶段,如果我不能解决这个问题,我将不得不重新编写这个控制台应用程序作为服务。希望有人可以为我节省一整天的额外工作并帮助我解决这个问题?
添加 - 基于下面的@Dmitry Martovoi 帖子,我为每个用户添加了刻度,堆栈跟踪已更改为:
System.NullReferenceException:对象引用未设置为对象的实例。
它指向同一个 saveAs 函数中的这一行:
oDoc.Close(false, Type.Missing, Type.Missing);
添加 - 我一直在更改拥有此路径的用户,我不确定哪个用户正在运行它,这是生成的。这是一个应用程序事件日志错误。注意 - 这仅在通过任务调度程序运行应用程序时发生:
Faulting application name: WINWORD.EXE, version: 14.0.6129.5000, time stamp: 0x5082f340
Faulting module name: btmofficea.dll, version: 3.0.2.280, time stamp: 0x4cc57919
Exception code: 0xc0000005
Fault offset: 0x0000000000005e1f
Faulting process id: 0x2a6c
Faulting application start time: 0x01ce8bec64ccf85d
Faulting application path: C:\Program Files\Microsoft Office\Office14\WINWORD.EXE
Faulting module path: C:\Program Files\Motorola\Bluetooth\btmofficea.dll
Report Id: a393403d-f7df-11e2-b68c-74de2b9ca154
OK 问题已解决。从链接中可以看出@dmay 粘贴的 MS 不建议在服务器端运行无人值守的办公应用程序,并表示这是不受支持的。然而,解决方案是沿着@Dmitry 的方向前进:
1)开始->运行->dcomcnfg
2) 组件服务->计算机->我的电脑
3)右键单击我的电脑,属性
4) COM 安全选项卡,启动和激活权限,编辑默认值
5)为NETWORK SERVICE添加所有访问权限(显然这是最好的帐户),您用于运行计划任务
6) 右键单击我的电脑 > DCOM 配置 > Microsoft Word 97 - 2003 文档 > 属性
7)转到身份选项卡并勾选交互式用户
8) 转到安全选项卡并检查所有三个部分的自定义设置。确保 NETWORK SERVICE 显示并勾选了选项。这应该是第 5 步的结果。
9) 从第 6 步开始重复其他 office 文档类型。我已经为 xls 和 mdb 这样做了
10)重新启动....现在一切正常
对不起,我应该添加这个。如果您在第 7 步看不到这些:
'Microsoft Word 97 - 2003 Document'
'Microsoft Excel Application'
'Microsoft Access Application
然后它可能是 64 位机器上的 32 位办公室安装,这是使它们可见的解决方案:
谢谢大家的时间