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

C# .net应用程序在通过计划任务激发时失败,c#,.net,windows,scheduled-tasks,console-application,C#,.net,Windows,Scheduled Tasks,Console Application,我有一个用c#编写的.net控制台应用程序,它在visual studio中运行时,以及在文件系统中单击.exe文件时,都会执行它应该执行的操作。它运行起来很有魅力。但是,当我在Windows7Dev机器或Windows2008R2 prod机器中创建计划的windows任务时,它无法执行应用程序中的最后一步。这一步是在后台打开.doc并将其转换为.docx(只需运行另存为) 该应用程序旨在访问网络路径,创建一个名为~Converted的目录,该目录没有问题,然后针对在后台打开的每个.doc文件

我有一个用c#编写的.net控制台应用程序,它在visual studio中运行时,以及在文件系统中单击.exe文件时,都会执行它应该执行的操作。它运行起来很有魅力。但是,当我在Windows7Dev机器或Windows2008R2 prod机器中创建计划的windows任务时,它无法执行应用程序中的最后一步。这一步是在后台打开.doc并将其转换为.docx(只需运行另存为)

该应用程序旨在访问网络路径,创建一个名为~Converted的目录,该目录没有问题,然后针对在后台打开的每个.doc文件,执行另存为,并将.docx版本的do保存在~Converted目录中。我相信代码没有问题,因为它在计划任务之外构建和运行时没有问题。我已经探索了任务中的每一个设置,进行了修改并重新测试,但没有成功。我运行它的用户是administrators组的一部分,IMO权限不是问题。我用网络服务帐户试过了,结果是一样的

仅在运行计划任务时生成的实际堆栈跟踪错误为:

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

执行此操作的代码行是:

Application oWord = new Application();
我在这上面搜索了几个小时,没有发现任何有用的东西。当代码打开/初始化word文档时,通过任务运行代码似乎会导致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
好的,问题解决了。从链接@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位office安装,下面是使它们可见的步骤:


谢谢大家抽出时间

首先,看看这个

您可以尝试以下几项:

  • 在真实用户帐户下运行任务(确保此帐户可以访问网络路径)
  • 这里提到的“小川黑客” 为系统帐户创建桌面文件夹
    C:\Windows\SysWOW64\config\systemprofile\desktop
    (或
    \System32\
    ,如果您的系统是32x)

您应授予指定用户访问COM automation factory的权限:

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

    • 当应用程序按预期正常工作时,面临类似的问题,但当我从计划任务运行它时,它会立即关闭,并抛出一个错误:“找不到文件路径…”

      通过设置计划任务操作参数修复了此问题:


      开始(可选):c:\my application\executable folder path

      当我看到这个回复时,我很兴奋。这看起来真是个好建议!这对我不起作用。我添加了abd在所有四个框中给我的本地管理员用户和网络服务帐户打勾,并尝试代表这两个用户运行任务,结果相同。还有其他想法吗?我接受了这个答案,因为它是需要做的事情的80%。请注意在我最初编辑的帖子中标注为1-10的步骤。第1-5步是@DmitryI建议的步骤,但在周五创建C:\Windows\SysWOW64\config\systemprofile\Desktop文件夹时发现了这个非常奇怪的解决方案,这对我没有帮助。我的系统是64,但我会把它放在系统32下,因为目前我愿意尝试任何东西。我不喜欢将此作为服务重新编写的想法。对我来说,肯定有解决办法!!!!谢谢你。你的回答对我来说真的很有用