我有一个小程序需要在不使用任务计划程序的情况下运行。它使用 Intuit 的 QBFC API,要求“在用户上下文中”运行。该程序从同一台机器上运行的 SQL 服务器中扫描一些数据并将其推送到 QuickBooks。因此,该程序需要每半小时左右运行一次,并且不需要用户交互。该机器运行的是 Windows Server 2008 R2。
如果我手动运行该程序,它会按预期运行。尝试使用任务计划程序会导致程序在尝试连接到 QuickBooks 时崩溃。
答案1
我猜你想让应用程序在用户登录个人资料时启动?如果您希望程序自动启动,则在任何其他情况下都需要计划任务。
实际上,您也可以将其放在启动中。我将其放在注册表中的启动中(当前版本=>运行) 并且我可以确认它有效。
现在回答 OP 的实际问题,我相信我找到了问题的答案->不一定是达到目标的解决方案。
QB 和 QBXML SDK 应用程序必须在用户上下文中运行。您必须打开 Windows 会话,但用户不必登录 QB 即可运行您的应用程序。但是,当您的应用程序首次建立连接并且您授权无人值守模式时,QB 必须由管理员打开。
从 Vista 或 Win7 开始,Windows Scheduler 已从基于桌面变为基于服务,并且新操作系统以服务为基础的 Scheduler。
QuickBooks 和 QODBC 是基于桌面的应用程序/驱动程序。
QODBC 使用 QuickBooks SDK,QuickBooks SDK 使用 QuickBooks 应用程序从公司文件中获取数据。
QuickBooks SDK 需要计算机上有一个活动的桌面会话(有人登录),因为 QuickBooks 是一个基于桌面的应用程序。如果没有人登录服务器/计算机,您将收到错误“无法启动 QuickBooks”。
即使您已指定用户名/密码并让用户登录到计算机,您仍可能会注意到相同的错误。这是因为从任务计划程序执行的任务以不同的用户/新会话身份运行。
解决方法是使用基于桌面的调度程序,如 Z-Cron 或http://alternativeto.net/software/task-scheduler/?platform=windows。
现在这可能不是您想要的解决方案。但它确实回答了您的问题并包含解决方法。
我也面临着同样的困境,正在寻找解决方案。这可能必须是我要走的路。另一个选择是在任何用户登录时启动您的控制台应用程序,并跟踪您上次成功运行、当前应用程序状态(无论它当前是否正在运行) - 这样您就可以确保您在指定的时间表内运行。但这不仅是一个相对混乱的解决方案,而且您不一定能保证有人会在您要求的时间内登录(他们甚至可能一周都不会登录)。
我尝试使用任务计划程序从另一台服务器启动一个远程会话,这会导致应用程序从启动时运行。但这给了我完全相同的结果。
我目前正在研究 QBWC,看看这两种方法是否能让我自主实现按计划与 QB 进行沟通的预期目标。
很遗憾我无法为您提供明确的解决方案,但我认为您和其他人可以从我迄今为止所做的研究中受益。此外,我希望这些信息能帮助您找到正确的解决方案。