我启动的程序是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"
这就是我想要的。但我想知道:
是否有更干净的方法来做到这一点,而不先生成这个批处理文件,所以:只使用注册表?
这可能对其他人有用,因为网络充满了“如何从注册表中启动记事本”的例子,但没有一个(我可以找到)提到这个问题。
其他信息:
我不能让“开始”,在注册表项工作(
start notepad.exe C:\test1.txt
不启动时没有)。RunServicesOnce(代替的RunOnce),它用来一旦启动程序,以异步方式,显然不会再在Windows 7存在
(代替的RunOnce)运行也是异步的,效果很好。但显然,我不想在每次重新启动后启动此自述文件。
怎么样把它写进'HKCU \软件\微软\的Windows \ CurrentVersion \ RunOnce'呢?这将不会执行,直到用户登录。 –
@Ken白:公平我没有测试过你的解决方案。但是,我正在从注册表中写入请求管理员权限的(NSIS)安装程序。由于该用户没有管理员权限,HKCU可能无法工作。 –