在Windows 7启动时异步启动一个程序,只使用一次注册表

时间:2013-06-27 12:33:13

标签: windows-7 batch-file registry

我正在启动的程序是Windows记事本(对于需要重启的程序安装后的自述文件)。我在Windows 7 Professional中工作,具有管理员权限。

我想让以下解决方案有效:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
Name: myregentry
Type: REG_SZ
Data: notepad.exe C:\test2.txt

但是,RunOnce是同步的(http://msdn.microsoft.com/en-us/library/aa376977%28v=vs.85%29.aspx)。这导致记事本在完全黑屏(screenshot @ tinypic)之上启动,除了阅读文本之外不可能做任何事情。启动等待,仅在记事本窗口关闭后才恢复。这对我的使用是不可接受的(这会让用户感到困惑)。

我可以使用以下解决方案:

1)创建一个注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
Name: myregentry
Type: REG_SZ
Data: C:\launchreadme.bat

2)在C:\ launchreadme.bat:

创建一个自删除批处理文件
@ECHO OFF
start notepad.exe C:\test2.txt

REM **** Delete this script ****
DEL "%~f0"

这就是我想要的。不过我想知道:

是否有更简洁的方法来执行此操作,而不首先生成此批处理文件,因此:仅使用注册表?

这可能对其他人有用,因为网上充满了“如何从注册表中启动记事本”的例子,但是没有一个(我能找到的)提到这个问题。

其他信息:

  1. 我无法“开始”在注册表项中工作(start notepad.exe C:\test1.txt在启动时不执行任何操作。)

  2. RunServicesOnce(而不是RunOnce),用于异步启动程序一次,在Windows 7中显然不再存在。

  3. 运行(而不是RunOnce)也是异步的,效果很好。但显然我不想在每次重启后启动这个自述文件。

1 个答案:

答案 0 :(得分:3)

您可以使用批处理文件方法而无需批处理文件:

cmd /c "start notepad"