微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个用c#编写的.net控制台应用程序,它在Visual Studio中运行时以及在文件系统中单击.exe文件时完全应该如此。 它像一个魅力运行。 但是当我在Windows 7开发机器或Windows 2008 R2 prod机器上创build计划的Windows任务时,它无法执行应用程序中的最后一步。 这一步是在后台打开一个.doc文件,并将其转换为.docx文件(简单地运行一个保存文件)。

该应用程序被devise为访问一个networkingpath,创build一个名为〜Converted的dir,它没有问题,然后为每个.doc它发现它在后台打开,执行一个保存,因为它们保存了.docx版本的do在〜转换目录。 我相信代码没有问题,因为它构build并在计划任务外运行没有问题。 我已经探索了任务中的每一个环境,进行了修改,并重新testing,没有成功。 我正在用pipe理员组的一部分用户运行它,IMO权限不是问题。 我已经使用NETWORK SERVICE帐户尝试过,结果相同。

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

System.UnauthorizedAccessException:检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因如下:80070005访问被拒绝。 (从HRESULTexception:0x80070005(E_ACCESSDENIED))。

如何使我的服务停止自动发布到Windows应用程序事件日志

为什么在Windows7(.net 3.5)中运行的应用程序在Win8(.net4.5)中不起作用

什么是使用用户提供的密码encryption和解密string的简单方法,在本机Win32和.NET中都可以使用?

SaveFileDialog阻止可移动驱动器

Powershell Get-Content + Invoke-Expression单独执行语句,还是一次执行所有语句?

这样做的代码行是:

Application oWord = new Application();

我已经search了几个小时,发现没有什么帮助。 当代码打开/初始化Word文档时,似乎通过任务运行代码会导致COM访问问题。 该任务正在享受完全的admim权限,以最高权限运行,以及用户login时是否有趣。 正如我所说,所有这些设置都是一起玩的,没有什么区别。

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

添加 – 基于@Dmitry Martovoipost下面我已经添加了对EVERYONE用户的滴答声和堆栈跟踪已更改为:

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

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

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

添加 – 我一直在改变用户谁拥有这个path,我不知道哪个用户正在运行这是生成的。 这里是一个应用程序事件日志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 FilesMicrosoft OfficeOffice14WINWORD.EXE Faulting module path: C:Program FilesMotorolaBluetoothbtmofficea.dll Report Id: a393403d-f7df-11e2-b68c-74de2b9ca154

确定问题已修复。 从链接中可以看出@dmay粘贴MS不build议在服务器端无人值守运行Office应用程序,并且说这是不受支持的。 然而,解决scheme是沿着轨道@Dmitry是领导:

1)开始 – >运行 – > dcomcnfg

2)组件服务 – >计算机 – >我的电脑

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

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

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

6)右键单击我的电脑> DCOMconfiguration> Microsoft Word 97 – 2003文档>属性

7)转到身份标签并勾选交互式用户

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

9)对于其他办公文档types,从第6步开始重复。 我已经这样做了xls和mdb

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

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

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

那么它可能是一个64位机器上的32位的办公室安装,这是使它们可见的解决scheme :

谢谢大家的时间

C# – 文件path的正则expression式,例如C: test test.exe

什么是最安全的方式来检索系统驱动器

WTSQuerySession@R_700_4045@ion返回一个不同的域名

认的ScrollingOffset鼠标滚轮更改

如何使用C#代码获取IIS虚拟目录和Web应用程序的物理path?

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

1)开始 – >运行 – > dcomcnfg

2)组件服务 – >计算机 – >我的电脑

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

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

5)添加指定用户的所有访问权限,用于运行计划任务。

面对类似的问题,当应用程序正常按预期工作,但是当我从计划的任务运行它,它立即关闭,并引发错误:“找不到文件路径…”。

通过设置计划任务操作参数来修复它:

开始(可选): c:我的应用程序可执行文件夹路径

这似乎是一个权限问题给我。 在VS内部运行代码与自己运行代码差别太大了。 VS负责大部分的工作,使开发人员的生活变得简单。

您可以请检查您用来运行计划任务的帐户是否有权访问网络路径?

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

你可以尝试几件事情:

在真正的用户帐户下运行你的任务(确保这个帐户有权访问网络路径)

这里提到的“Ogawa Hack”, 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:WindowsSysWOW64configsystemprofileDesktop创建桌面文件夹(或者System32如果您的系统是32x)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐