好吧,正如标题所暗示的,它是关于检查最后一次系统重启时间并依赖于此,执行某些任务。
我的情况是,我会要求用户在安装过程中在某些条件下重启系统。现在点击'确定'安装程序将关闭,用户必须手动重启系统。
现在说,用户在不重新启动系统的情况下运行安装程序。现在,安装程序应报告错误并要求重新启动。
到目前为止可能的解决方法。
有更好的想法吗?
答案 0 :(得分:1)
RunOnce密钥仅适用于管理员,因此您必须牢记这一点。
您可以查看系统运行的时间:
System::Call 'kernel32::GetTickCount64()l.r0'
StrCmp $0 error 0 +2
System::Call 'kernel32::GetTickCount()i.r0'
$0
将包含自上次启动以来的毫秒数。 (GetTickCount64是Vista +,旧系统将在大约45天后翻转到0)
在.onInit
中,您从注册表中读取了之前的值(如果有)并进行比较,如果当前值大于之前的值,则系统尚未重新启动。
另一种选择是将值写入(唯一的)易失性注册表项,这些键只存在于内存中并在重新启动时丢失:
!include WinCore.nsh
!include LogicLib.nsh
!ifndef REG_OPTION_VOLATILE
!define REG_OPTION_VOLATILE 1
!endif
System::Call 'advapi32::RegCreateKeyEx(i ${HKEY_LOCAL_MACHINE}, t "Software\Volatile\{f255ae7a-fd7d-11e4-a322-1697f925ec7b}", i0, i0, i ${REG_OPTION_VOLATILE}, i ${GENERIC_WRITE}, i0, *i.r1, *i)i.r0'
${If} $0 = 0
System::Call 'advapi32::RegCloseKey(ir1)'
WriteRegDWORD HKLM "Software\Volatile\{f255ae7a-fd7d-11e4-a322-1697f925ec7b}" NoReboot 1
${EndIf}
Windows 95/98 / ME不支持易失密钥。