通过计划任务激发.net应用程序时失败

本文关键字:net 应用程序 失败 计划 任务 | 更新日期: 2023-09-27 18:25:11

我有一个用c#编写的.net控制台应用程序,当它在visualstudio中运行时,以及当单击文件系统中的.exe文件时,它会做它应该做的事情。它就像一个符咒。但是,当我在我的windows 7开发机器或windows 2008 R2生产机器中创建一个计划的windows任务时,它无法执行应用程序中的最后一步。这一步是在后台打开.doc并将其转换为.docx.

该应用程序被设计为访问网络路径,创建一个名为~Converted的目录,它没有问题,然后对于每个.doc,它发现它在后台打开,执行另存为,他们在~Converted目录中保存do的.docx版本。我相信代码没有错,因为它在计划任务之外构建和运行时没有问题。我探索了任务中的每一个场景,进行了修改和重新测试,但没有成功。我与管理员组的一名用户一起运行它,IMO权限不是问题所在。我用网络服务帐户试过了,结果是一样的。

只有在运行计划任务时才会生成实际堆栈跟踪错误:

System.UnauthorizedAccessException:由于以下错误,检索CLSID为{000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005访问被拒绝。(HRESULT中的异常:0x80070005(E_ACCESSDENIED))。

执行此操作的代码行是:

Application oWord = new Application();

我搜索了几个小时,没有发现任何帮助。当代码打开/初始化单词doc时,通过任务运行代码似乎会导致COM访问问题。该任务非常有趣,拥有完全的admim权限,以最高权限运行,以及用户是否登录。正如我所说的,所有这些设置都被玩过了,这并没有什么不同。

现在已经到了这样一个阶段,如果我不能解决这个问题,我将不得不将这个控制台应用程序作为服务重新编写。希望有人能帮我省去一整天的额外工作,并帮助我解决这个问题??

添加-基于@Dmitry Martovoi下面的帖子,我为EVERYONE用户添加了记号,堆栈跟踪已更改为:

System.NullReferenceException:对象引用未设置为对象的实例。

它指向同一saveAs函数内的这一行:

oDoc.Close(false, Type.Missing, Type.Missing);

添加-我一直在更改拥有此路径的用户,我不确定是哪个用户在运行它,这是生成的。这是一个应用程序事件日志erorr。注意-只有通过任务调度程序运行应用程序时才会发生这种情况:

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-pasted中所示,MS不建议在服务器端无人值守的情况下运行office应用程序,并表示这是不受支持的。然而,解决方案已经走上正轨@Dmitry正在前进:

  1. 开始->运行->dcomcnfg

  2. 组件服务->计算机->我的电脑

  3. 右键单击我的电脑,属性

  4. COM安全选项卡,启动和激活权限,编辑默认

  5. 添加网络服务的所有访问权限(这显然是最好使用的帐户),您正在使用它来运行计划任务

  6. 右键单击"我的电脑">DCOM配置>Microsoft Word 97-2003文档>属性

  7. 转到身份选项卡并勾选交互式用户

  8. 转到"安全"选项卡,检查所有三个部分的自定义设置。确保网络服务显示并勾选了选项。这应该是步骤5的结果。

  9. 对其他office文档类型重复步骤6。我已经为xls和mdb 这样做了

  10. 重新启动。。。。现在一切都很好

对不起,我应该添加这个。如果你在步骤7看不到这些:

               'Microsoft Word 97 - 2003 Document'
               'Microsoft Excel Application'
               'Microsoft Access Application

然后它可能是在64位机器上安装的32位办公室,这里有一个使它们可见的解决方案:

通过计划任务激发.net应用程序时失败

您应该授予指定用户对COM自动化工厂的访问权限:

  • 1) 开始->运行->dcomcnfg
  • 2) 组件服务->计算机->我的电脑
  • 3) 右键单击"我的电脑","属性"
  • 4) "COM安全"选项卡,"启动和激活权限","编辑默认值"
  • 5) 添加您用于运行的指定用户的所有访问权限计划任务

面对类似的问题,当应用程序正常工作时,但当我从计划任务中运行它时,它会立即关闭,并抛出错误:"找不到文件路径…"。

通过设置计划任务动作参数修复了它:

起始位置(可选): c:''my application''可执行文件夹路径

首先,看看这个http://support.microsoft.com/?id=257757

你可以尝试一些东西:

  • 在真实用户帐户下运行任务(确保此帐户可以访问网络路径)
  • 这里提到的"小川黑客"http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64为系统帐户C:'Windows'SysWOW64'config'systemprofile'Desktop(如果您的系统是32x,则为'System32')创建桌面文件夹