批处理手动运行良好。但是当从任务调度程序运行时会出错
Posted
技术标签:
【中文标题】批处理手动运行良好。但是当从任务调度程序运行时会出错【英文标题】:Batch manually runs well. But When ran from Task scheduler gives error 【发布时间】:2015-06-28 09:53:26 【问题描述】:在 Windows Server 2008 上,我正在安排一个任务来运行一个批处理文件,该批处理文件又会触发一个控制台应用程序。当双击应用程序时,它运行完美。但是当从任务计划程序运行时,我在日志中收到以下错误。
exception from hresult 0x800a03ec
我登录并运行任务计划程序的 ID 具有完全的管理员权限。
我已经尝试过这些解决方案.. Batch File runs manually but not in task scheduler
Batch file called by scheduled task throws error when scheduled, runs fine when double clicked
Batch runs manually but not in scheduled task
但是问题没有解决。事实上,当从任务调度程序运行时,它会在控制台应用程序中触发成功和异常邮件。但手动运行时并非如此。需要帮助!!
注意:我通过控制台应用程序处理的所有输出报告都将采用 .xlsx 格式。
批处理文件如下所述
@ECHO.
@ECHO /***************************************************************/
@ECHO Report Application
@ECHO /**************************************************************/
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C
)
SET DRV=E:\ReportApplication
cd %DRV%\bin\Release\
ReportSolution.exe >> %DRV%\Log\ReportSolutionlog%Month%%DAY%%Year%.txt
cd\
cd %DRV%
@ECHO Application is completed successfully
@ECHO /**********************************************/
【问题讨论】:
【参考方案1】:问题终于解决了。我不认为问题出在批处理文件或应用程序上。
这个解决方案在...
・Windows 2008 Server x64
请创建此文件夹。
C:\Windows\SysWOW64\config\systemprofile\Desktop
・Windows 2008 Server x86
请创建此文件夹。
C:\Windows\System32\config\systemprofile\Desktop
...而不是 dcomcnfg.exe。
此操作消除了我系统中的办公自动化问题。
systemprofile 文件夹中似乎需要一个 Desktop 文件夹才能通过 Excel 打开文件。
它从Windows2008消失,Windows2003有文件夹, 我认为它会导致这个错误。
我在下面提到的链接中找到了这个答案。小川的回答。
https://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64?forum=innovateonoffice
但我不知道如何通过创建一个空文件夹来解决问题。但它有效..希望这对有类似问题的人有所帮助
【讨论】:
这确实很有趣。如果在 Excel 检查文件夹%USERPROFILE%\Desktop
的情况下,将上面的 ReportSolution.exe
调用首先添加到 if not exist E:\ReportApplication\Desktop md E:\ReportApplication\Desktop
行和第二行 set "USERPROFILE=E:\ReportApplication"
也会很有趣。如果 Excel 直接从 Windows 注册表获取系统帐户的配置文件目录,这将不起作用。【参考方案2】:
以下 2 行可能会出现问题:
SET DRV=E:\ReportApplication
cd %DRV%\bin\Release\
cd
不带参数/D
不会改变当前驱动器。因此,在当前工作目录为 C:\Windows\System32
的情况下,在使用任务调度程序运行批处理文件时,目录更改不起作用,%SystemRoot%\System32
(这样更好)仍然是当前工作目录。
双击批处理文件时,Windows 将批处理文件的目录设置为当前工作目录。当批处理文件位于驱动器 E:
上时,这会在双击时生成一个工作批处理文件。
解决办法是:
SET "DRV=E:\ReportApplication"
cd /D "%DRV%\bin\Release\"
【讨论】:
我已经做了你提到的改变,但情况仍然没有改变。当我双击并从批处理文件启动应用程序时,它工作正常。我还观察到,在打开和写入 Excel 表时,生产应用程序中出现异常。这仅在通过任务调度程序运行时发生。还有其他建议吗? 感谢您在尝试解决问题时提供的帮助。已经解决了。 excel和xls相关的代码写在批处理文件中提到的reportapplication.exe中。这批将只运行应用程序并创建日志文件。以上是关于批处理手动运行良好。但是当从任务调度程序运行时会出错的主要内容,如果未能解决你的问题,请参考以下文章