我正在启动的程序是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"
这就是我想要的。不过我想知道:
是否有更简洁的方法来执行此操作,而不首先生成此批处理文件,因此:仅使用注册表?
这可能对其他人有用,因为网上充满了“如何从注册表中启动记事本”的例子,但是没有一个(我能找到的)提到这个问题。
其他信息:
我无法“开始”在注册表项中工作(start notepad.exe C:\test1.txt
在启动时不执行任何操作。)
RunServicesOnce(而不是RunOnce),用于异步启动程序一次,在Windows 7中显然不再存在。
运行(而不是RunOnce)也是异步的,效果很好。但显然我不想在每次重启后启动这个自述文件。
答案 0 :(得分:3)
您可以使用批处理文件方法而无需批处理文件:
cmd /c "start notepad"