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

时间:2010-04-09 18:59:23

标签: vb6 scheduled-tasks dcom createobject

我非常感谢对此有所帮助!这可能是一个棘手的问题。 :)

问题

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

关键点

  • 在Windows 2000,2003,2008和Vista上确认了行为。
  • 应用程序在预定时间以用户X身份执行,由Windows任务计划程序执行。
  • 每次执行。应用确实开始了!
    • 如果用户X通过RDP登录,则运行完美。 (请注意,用户无需连接,只需登录)
    • 如果用户X未登录到计算机,则应用程序将失败。

失败点

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

思想

经过一些谷歌搜索后,我最初的怀疑是针对MAPI的。从我可以看到MAPI要求用户登录。该应用程序具有MAPI引用。但即使删除了所有MAPI引用,它仍然无效。

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

当用户以用户身份执行时,用户是否未登录?

哪些信息有帮助?

  • 明确的答案真的很棒。
  • 任何有关任何VB6功能/ Windows API的信息,根据用户是否登录可能会有不同的行为,这些信息肯定会有所帮助。
  • 类似的经历可能会让我朝着正确的方向前进。
  • 有关调试的提示。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

DCOM组件的“身份”设置是什么。

C:\窗口\ system32 \的COM \ comexp.msc

  1. C:\窗口\ system32 \的COM \ comexp.msc
  2. 组件服务
  3. 我的电脑
  4. DCOM配置
  5. DCOM对象,右键单击属性
  6. 身份标签
  7. 将其设置为“此用户”并设置具有所需权限的用户,然后将该应用程序作为您自己运行,以查看DCOM组件是否仍然有效,然后再从调度程序重试。

答案 2 :(得分:0)

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

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

不是完美的解决方案,但仍然是一种解决方案。

答案 3 :(得分:0)

有您的VB6表格吗? 因为当你运行预定时,它会“作为服务”运行,因此它不能有表格,或者它是否有形成环境以显示它们。

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

也许您可以轻松地将代码转换为VBScript运行,并安排它。