2013-06-27 111 views
4

我启动的程序是Windows记事本(用于需要重新启动程序安装后的自述文件)。我正在使用Windows 7 Professional,拥有管理员权限。在Windows 7上启动时只启动一次程序,仅使用注册表

我想获得以下解决方案工作:

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)之上启动,除了阅读文本之外,不可能做任何事情。启动等待,并且只有在记事本窗口关闭后才能恢复。这是我无法接受的(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. (代替的RunOnce)运行也是异步的,效果很好。但显然,我不想在每次重新启动后启动此自述文件。

+1

怎么样把它写进'HKCU \软件\微软\的Windows \ CurrentVersion \ RunOnce'呢?这将不会执行,直到用户登录。 –

+0

@Ken白:公平我没有测试过你的解决方案。但是,我正在从注册表中写入请求管理员权限的(NSIS)安装程序。由于该用户没有管理员权限,HKCU可能无法工作。 –

回答

3

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

cmd /c "start notepad" 
+0

谢谢,这工作。 –

+1

为了将来的参考,使用“cmd/c”的注册表数据启动notepad.exe ^“C:\ spaces with \ readme.txt ^”“ –

相关问题