4

我正在启动的程序是 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"

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

有没有一种更简洁的方法来做到这一点,而不是先生成这个批处理文件,所以:只使用注册表?

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

附加信息:

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

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

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

4

1 回答 1

4

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

cmd /c "start notepad"
于 2013-06-27T12:42:27.360 回答