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

2024-01-07

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

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

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

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

执行此操作的代码行是:

Application oWord = new Application();

我已经搜索了几个小时,但没有发现任何有用的东西。当代码打开/初始化 Word 文档时,通过任务运行代码似乎会导致 COM 访问问题。该任务具有完整的 admim 权限、以最高权限运行以及用户是否登录。正如我所说,所有这些设置都已被使用过,但没有产生任何影响。

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

添加 - 根据下面的 @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

好的问题已解决。从@dmay 粘贴的链接中可以看出,MS 不建议在服务器端运行无人值守的办公应用程序,并表示这是不受支持的。然而,解决方案是沿着 @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,这里是解决方案 http://blogs.technet.com/b/the_microsoft_excel_support_team_blog/archive/2012/11/12/microsoft-excel-does-not-appear-in-dcom-configuration-snap-in.aspx让它们可见:


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

  • 1)开始->运行->dcomcnfg
  • 2) 组件服务->计算机->我的电脑
  • 3)右键单击我的电脑,属性
  • 4) COM 安全选项卡、启动和激活权限、编辑默认值
  • 5) 为指定用户添加所有访问权限,您用于运行 预定任务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过计划任务触发时.net应用程序失败 的相关文章

  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 如何在 C++ 中为指针“this”赋值

    在函数中 如何分配this一个新的价值 您可以分配对象this点于 this XY 但你不能分配直接值this this XY Error Expression is not assignable
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • 注入包含接口的所有已注册实现的 Enumerable

    给出以下接口 public interface IMyProcessor void Process 我希望能够注册多个实现 并让我的 DI 容器将它们的可枚举注入到这样的类中 public class MyProcessorLibrary
  • 如何从 Powerpoint 2010 导出电影?

    如何使用 MS Office PIA 主互操作程序集 或其他方式以编程方式将嵌入视频从 powerpoint 2010 导出到外部文件 在演示文稿中嵌入视频是 Powerpoint 2010 中的一项新功能 我找不到解决方案 PPTX 文件
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • 在 clang 中向量化函数

    我正在尝试根据此用 clang 对以下函数进行矢量化铿锵参考 http llvm org docs Vectorizers html 它采用字节数组向量并根据以下条件应用掩码this RFC https www rfc editor org
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐