除非用户登录,否则VB6应用程序不会按计划任务执行

除非用户登录,否则VB6应用程序不会按计划任务执行,vb6,scheduled-tasks,dcom,createobject,Vb6,Scheduled Tasks,Dcom,Createobject,我将非常感谢您在这方面的帮助!这可能是个棘手的问题 问题 我有一个VB6应用程序,它被设置为计划任务。它每次都会启动,但在执行CreateObject()时,如果用户未登录到计算机,则会失败 我正在寻找可能导致这种情况的信息。我的主要怀疑是某些Windows API出现了故障 要点 在Windows 2000、2003、2008和Vista上确认的行为 应用程序在Windows任务调度器执行的计划时间以用户X的身份执行 它每次都执行。应用程序启动了! 如果用户X是通过RDP登录的,那么它

我将非常感谢您在这方面的帮助!这可能是个棘手的问题

问题

  • 我有一个VB6应用程序,它被设置为计划任务。它每次都会启动,但在执行
    CreateObject()
    时,如果用户未登录到计算机,则会失败
  • 我正在寻找可能导致这种情况的信息。我的主要怀疑是某些Windows API出现了故障
要点

  • 在Windows 2000、2003、2008和Vista上确认的行为
  • 应用程序在Windows任务调度器执行的计划时间以用户X的身份执行
  • 它每次都执行。应用程序启动了!
    • 如果用户X是通过RDP登录的,那么它可以正常运行。(请注意,用户不需要连接,只需登录)
    • 如果用户X未登录到计算机,则应用程序将失败
故障点

  • 使用
    CreateObject()
    实例化DCOM对象(也是应用程序的一部分)时,应用程序失败
  • DCOM对象在启动时声明.dll引用(全局/在.bas文件之上),并运行一个小型启动函数。失败必须在启动期间发生,可能在其中一个.dll声明中
思想

通过谷歌搜索,我最初的怀疑是针对MAPI的。据我所见,MAPI要求用户登录。应用程序具有MAPI引用。但即使删除了所有MAPI引用,它仍然不起作用

如果用户登录,有什么区别?注册表映射?环境Explorer.exe正在运行

当应用程序以用户身份执行时,用户没有登录吗

什么信息会有帮助?

  • 一个明确的答案真的很棒
  • 任何有关VB6功能/Windows API的信息,如果这些信息根据用户是否登录而不同,肯定会有所帮助
  • 类似的经历可能会引导我走向正确的方向
  • 调试这个的技巧

VB应用程序可能需要保留仅在用户登录时运行的服务。

DCOM组件的“标识”设置是什么

C:\WINDOWS\system32\Com\comexp.msc

  • C:\WINDOWS\system32\Com\comexp.msc
  • 组件服务
  • 我的电脑
  • DCOM配置
  • 在DCOM对象上,右键单击“属性”
  • 标识选项卡

  • 将其设置为“This User”,并设置具有所需权限的用户,然后以自己的身份运行应用程序,查看DCOM组件是否仍能工作,然后从计划程序重试

    我们从未发现这是什么原因

    相反,我创建了一个RDP客户机,并将其放入计划任务中。它登录了一个启动中有所需应用程序的用户。一段时间后,RDP客户端强制注销用户(以防止失控的应用程序挂起系统)

    不是完美的解决方案,但却是一个解决方案。

    有VB6表单吗?
    因为当您运行scheduled时,它“作为一个服务”运行,所以它不能有表单,或者如果它有表单,就不能有一个显示表单的环境

    我不记得我用过什么,但存在通用的“作为服务运行”转换器exe来运行带窗口的VB6项目


    此外,您还可以轻松地将代码转换为VBScript运行,并对其进行调度。

    同样,DCOM组件本身可能需要利用只有在执行用户运行交互式会话时才可用的服务。应用程序失败的原因是什么?事件日志中或使用调试视图()时有任何提示吗?请注意,按计划任务运行的进程确实在非交互式环境中运行,在这种环境中,尝试显示窗口等操作可能会导致意外行为。