我正在写必须在Windows启动时运行的选项的应用程序。
当应用程序陷入我的电脑下它已真正解决之前,我受不了了,这是一个非关键应用。 我想我的应用程序礼貌地等待其他所有启动项来完成和解决,使用户的PC变成响应它开始做任何工作之前。
我怎么会去检测这个条件? 我想我可以遍历注册表,查找所有的启动进程正在运行,或使用一个稍长的定时器。 我只希望有另一种更小的hackish招我可能会使用。
编辑:应用程序有一个UI,并不能作为服务运行。 它有一个托盘模式。 它做了一些图像渲染。
我正在写必须在Windows启动时运行的选项的应用程序。
当应用程序陷入我的电脑下它已真正解决之前,我受不了了,这是一个非关键应用。 我想我的应用程序礼貌地等待其他所有启动项来完成和解决,使用户的PC变成响应它开始做任何工作之前。
我怎么会去检测这个条件? 我想我可以遍历注册表,查找所有的启动进程正在运行,或使用一个稍长的定时器。 我只希望有另一种更小的hackish招我可能会使用。
编辑:应用程序有一个UI,并不能作为服务运行。 它有一个托盘模式。 它做了一些图像渲染。
A“稍长”定时器是最好的途径。 我不会触摸到注册表以bargepole。
你会想,虽然考虑的一件事是,如果用户想发布您的计划本身会发生什么? 显然,你不想被延误了,然后。
我假设你的应用程序有一个用户界面? 如果没有,你可以考虑服务与Vista / 7的设置其启动类型为“自动(延迟)”
另请参阅此相关的问题: 如何建立在C#中的延迟启动应用程序?
最后一点,如果你的程序是不关键的,你担心它可能会慢下来,考虑降低应用程序的优先级。
看来这是在用户的手中最好的东西留下的类型,和Windows已经提供了很好的选择,以控制这一点,至少对Windows服务。
如果这是一个Windows服务,该服务可以被配置为启动自动(延时启动)
也许这是最好的选择?
如果你不想去的路线,或者如果你的程序是不是Windows服务,检测时,“定居”的Windows是非常主观且容易出错。 你可以监视磁盘IO作为一个有点可靠的指标。 磁盘IO通常是在启动过程中的瓶颈(尤其是对于系统而不SSD OS驱动器)。 你可能会得到“settledness”等待磁盘IO(由性能计数器指示)的合理近似下降到低于某一阈值。 您可能希望等待时间不超过可配置的时间量,然后开始无论如何,因为有些系统可能启动,并开始执行,税收的IO子系统无关,长时间运行的任务。
两个建议:
祝好运!
较晚(四年),这里的党,但万一别人绊倒在这个Q&A像我一样......我问过类似的问题 ,但我关注的是知道什么时候的事情了用户登录,在以前安定下来。 据我所知,OP的应用程序从桌面上运行,并具有用户界面元素,等等。但是,如果你检查线程,你会看到有办法告诉Windows是否已完成加载的服务。 因此,一个服务可以在启动时运行,清除“完成”的旗帜,等待服务启动,然后设置标志。 现在,当用户登录项,如果系统仍然在它的方式,应用程序就知道了,不急于初始化UI。 如果“完成”标志设置,用户界面可以“放心”关于在大部分或所有其他应用程序都做自己的事情的认识开始。 这有可能是用户将在登录后启动另一个应用程序。因此,完成标志置位,但事情仍然可以继续。 这是像CPU使用率等建议的检查是很有价值的地方。