我有一个程序,我想在 Windows 启动时启动。于是我把程序写到了注册表值SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce。该程序在 Windows 启动时立即运行。
但是,它会在任何其他进程启动之前运行该程序。我想让我的程序在我的桌面启动并且所有其他系统进程都启动后启动。我该怎么做?
编辑:所以我在我的程序中添加了一个延迟。无论我在我的程序中放置什么样的延迟,在我的程序运行之前,像桌面这样的进程都不会启动。
我有一个程序,我想在 Windows 启动时启动。于是我把程序写到了注册表值SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce。该程序在 Windows 启动时立即运行。
但是,它会在任何其他进程启动之前运行该程序。我想让我的程序在我的桌面启动并且所有其他系统进程都启动后启动。我该怎么做?
编辑:所以我在我的程序中添加了一个延迟。无论我在我的程序中放置什么样的延迟,在我的程序运行之前,像桌面这样的进程都不会启动。
根据微软:
除了 HKEY_LOCAL_MACHINE...\RunOnce 键之外,所有键及其条目都是异步加载的。因此,RunServices 和 RunServicesOnce 键中的所有条目都可能同时运行。
HKEY_LOCAL_MACHINE...\RunOnce 键中的条目以未定义的顺序同步加载。
因为 HKEY_LOCAL_MACHINE...\RunOnce 键是同步加载的,所以它的所有条目必须在 HKEY_LOCAL_MACHINE...\Run、HKEY_CURRENT_USER...\Run、HKEY_CURRENT_USER...\RunOnce 和启动文件夹条目可以加载之前完成加载.
那么这是否意味着如果您在 RunOnce 键中放置一个执行 Sleep(INFINITE) 的程序,它会阻止您的机器启动?有趣的。
只需使用该文章中提到的其他密钥之一。或者,如果您需要 RunOnce 的语义,请使用启动真实程序后退出的辅助程序。