代码之家  ›  专栏  ›  技术社区  ›  Tedd Hansen

vb6应用程序未按计划任务执行,除非用户已登录

  •  2
  • Tedd Hansen  · 技术社区  · 16 年前

    我非常感谢你在这方面的帮助!这可能是个棘手的问题。:)

    问题

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

    关键点

    • 在Windows2000、2003、2008和Vista上确认的行为。
    • 应用程序在预定时间以用户X的身份执行,由Windows任务计划程序执行。
    • 它每次执行。应用程序启动!
      • 如果用户x是通过RDP登录的,那么它运行得很好。(请注意,用户不需要连接,只需登录)
      • 如果用户x未登录到计算机,应用程序将失败。

    故障点

    • 使用时应用程序失败 创建对象() 实例化同时也是应用程序一部分的DCOM对象。
    • DCOM对象在启动时声明.dll引用(全局/在.bas文件的顶部),并运行一个小的启动函数。失败必须在启动过程中,可能在某个.dll声明中。

    思想

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

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

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

    什么信息会有帮助?

    • 一个明确的答案将是真正伟大的。
    • 有关任何vb6功能/windows api的任何信息,如果根据用户是否登录而采取不同的操作,都将有明显的帮助。
    • 类似的经历可能会引导我走向正确的方向。
    • 有关调试此的提示。
    4 回复  |  直到 15 年前
        1
  •  1
  •   Hace    16 年前

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

        2
  •  1
  •   Simeon Pilgrim    16 年前

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

    C:\windows\system32\com\comexp.msc

    1. C:\windows\system32\com\comexp.msc
    2. 组件服务
    3. 我的电脑
    4. DCOM配置
    5. DCOM对象 ,右键单击属性
    6. 身份 选项卡

    将其设置为“this user”,并设置具有所需权限的用户,然后以自己的身份运行该应用程序以查看DCOM组件是否仍可以工作,然后从调度程序重试。

        3
  •  0
  •   Tedd Hansen    15 年前

    我们从未发现是什么导致了这一切。

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

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

        4
  •  0
  •   Saic Siquot    15 年前

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

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

    也许您可以轻松地将代码转换为以vbscript的形式运行,并对其进行调度。