2

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

问题

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

关键点

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

故障点

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

想法

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

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

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

什么信息会有帮助?

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

4 回答 4

1

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

于 2010-04-09T19:03:04.180 回答
1

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

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

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

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

于 2010-04-09T19:48:58.827 回答
0

我们从未发现是什么原因造成的。

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

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

于 2010-12-29T10:00:07.690 回答
0

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

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

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

于 2011-04-14T18:33:32.587 回答