当前位置: 首页 > 知识库问答 >
问题:

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

阎建中
2023-03-14

我有一个用c#编写的.net控制台应用程序,它在Visual Studio中运行时以及单击文件系统中的.exe文件时完全可以执行它应该做的事情。它像一个魅力一样运行。但是,当我在 Windows 7 开发计算机或 Windows 2008 R2 生产计算机中创建计划的 Windows 任务时,它无法在应用程序中执行最后一步。此步骤是在后台打开一个.doc,并将其隐藏(只需运行另存为)到.docx。

该应用程序旨在访问网络路径,创建一个名为~Convert的dir,它不会出现问题,然后对于每个.doc它发现它在后台打开,执行保存,并在~转换的目录下保存.docx版本的do。我相信代码没有错,因为它在计划任务之外构建和运行没有问题。我探索了任务中的每个设置,进行了更改并重新测试,但没有成功。我正在运行它,即管理员组的一部分用户,IMO权限不是问题。我尝试使用网络服务帐户,结果相同。

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

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

执行此操作的代码行是:

Application oWord = new Application();

我在上面搜索了几个小时,没有找到任何有用的东西。当代码打开/初始化单词doc时,似乎通过任务运行代码会导致COM访问问题。该任务在完全赞赏权限、以最高权限运行以及用户是否登录时很有趣。正如我所说,所有这些设置都已被使用,它并没有什么不同。

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

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

系统。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)开始-

2)组件服务-

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

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

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

6)右键单击我的电脑

7) 转到“身份”选项卡并勾选“交互式用户”

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

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

10)重启......现在一切正常

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

               'Microsoft Word 97 - 2003 Document'

               'Microsoft Excel Application'

               'Microsoft Access Application

那么它可能是64位机器上的32位office安装,下面是使它们可见的解决方案:

谢谢大家抽出时间

共有3个答案

景凌
2023-03-14

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

你可以尝试几件事:

    < li >在真实用户帐户下运行您的任务(确保此帐户有权访问网络路径) < li >“小川奈那黑客”,如本文所述http://social . msdn . Microsoft . com/Forums/en-US/b 81 a 3c 4 e-62db-488 b-af06-44421818 ef 91/excel-2007-automation-on-top-of-a-Windows-server-2008-x64为系统帐户创建桌面文件夹< code > C:\ Windows \ syswow 64 \ config \ system profile \ Desktop (或< code>\System32\ <)
程昕
2023-03-14

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

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

开始位置(可选):c:\my application\Executive文件夹路径

姜智渊
2023-03-14

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

  • 1) 开始-
 类似资料:
  • 我正在建立一个特定的任务。 我需要跟踪程序何时结束,制作报告并分析它。所以,我想为它创建一个时间表。 例如,我有一个名为的进程,我想在它完成作业后检查它的日志。我有文件。我只需要在完成作业并关闭后运行它。 我无法更改程序代码中的任何内容,因此我相信,任务调度程序是唯一的方法。 帮帮我求你了

  • 我有一个通过ClickOnce (VS 2012)部署到文件共享的windows应用程序。它被配置为一个在线应用程序(没有安装在客户端)。我可以通过客户机运行这个应用程序,只需指向文件共享并双击该文件。我遇到的问题是在客户端(客户端实际上是一个服务器,Windows Server 2008)上运行这个任务。但是,如果我创建一个调用ClickOnce应用程序的批处理文件,任务计划程序可以成功调用该批

  • 如果我调用notifyStaff方法,这是有效的,但是如果我使用注释并将该方法作为计划任务运行,则无法实例化。有什么工作可以做吗?

  • 我需要使用将widows服务器的Scheduler任务中的几个计划任务转换为一个独立的应用程序。网 在过去,我用过石英。Net框架4。x、 基于不同调度器的多个长时间运行的任务存在一些小问题。 现在我正在使用。Net 5,我想知道是否有一种新的方式来安排任务,比如worker服务,或者使用Quartz更好、更灵活。网 因为我需要运行长时间的任务,从30到2小时,我需要创建一个定时的后台任务,使用系

  • 我已经创建了一个控制台应用程序,并尝试在任务计划程序中运行。当我通过单击可执行文件或使用快捷方式运行它时,它工作正常,但当我在任务调度程序中运行它时,我得到“PHLIP231 Prod的应用程序访问路径' C:\WINDOWS\DMBErrors '被拒绝。” 我已经在我的应用程序中搜索了此路径,甚至尝试手动将路径添加到我的计算机,但没有成功。我的应用程序构建了一个excel文件并将其写入相对于可

  • 我使用任务调度程序运行一个.bat文件,对文件进行压缩和加密,并在夜间将文件备份到外部驱动器。我已经用了很多年了,效果很好。从几个月前开始,任务调度程序中的任务被禁用,我不知道为什么。我可以启用它,它将再次运行,但在同一天或第二天再次禁用。然后我注意到,不仅是这个任务,其他计划任务(我没有写)也在同时被禁用。像谷歌软件更新这样的东西也被禁用了。 我一直在查看任务历史记录,以了解任务何时被禁用,并且