我正在启动的程序是 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 )。这导致记事本在完全黑屏(屏幕截图@tinypic)上启动,除了阅读文本之外别无他法。启动等待,并仅在记事本窗口关闭后恢复。这对我的使用是不可接受的(ti 会使用户感到困惑)。
我可以获得以下解决方案:
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 中不再存在。
Run(而不是 RunOnce)也是异步的并且运行良好。但显然我不想在每次重启后启动这个自述文件。