我有一个在Windows Server 2003上运行的.NET控制台应用程序,作为计划任务。
这使用Process类来运行另一个小型控制台应用程序,但它使用Process.StartInfo.Username来模拟用户将其作为运行。
如果在管理员中的计划任务中模拟的帐户,则它可以正常运行,但如果没有,则会收到错误:
'应用程序无法正确初始化(0xc0000142)'
我尝试过让用户“以批处理作业登录”和“本地登录”,但这似乎没有任何效果。 控制台应用程序确实以模拟用户身份启动,但随后失败。
查看Process Monitor,失败前的最后一个事件是:
Tool1.exe - 加载图片 - C:\ WINDOWS \ system32 \ kernel32.dll - SUCCESS
我在该工具上运行了Depends,它报告这是错误:
GetProcAddress(0x77E40000 [c:\ windows \ system32 \ KERNEL32.DLL],“FlsAlloc”)从地址0x7900746D的“c:\ windows \ system32 \ MSCOREE.DLL”调用,并由线程1返回0x77E6B49C。 由线程1退出“c:\ stfinstall \ stf \ tools \ tool1 \ TOOL1.EXE”(进程0xB3C),代码为1282(0x502)。
如果有人知道可能导致此错误的原因,甚至更好,我可以解决它,请告诉我!
欢迎提供替代方法的建议
谢谢:)
答案 0 :(得分:0)
我已经解决了这个问题,问题是它没有访问计划任务运行的用户的桌面,所以它失败了。 管理员似乎能够拥有此访问权限。
我绕过它的方式是让用户将任务运行为永久登录到盒子,因此始终可以访问桌面,这样就可以了。丑陋,我知道!