我试图从运行在 64 位版本的 Windows 8.1 上的 32 位应用程序中调用powercfg工具,使用CreateProcess并将以下命令作为lpCommandLine
参数:
"powercfg -waketimers"
它工作得很好,只是我偶然发现它返回的报告与我从Command Line
窗口运行相同的报告不同。
这是我在 32 位进程中得到的结果:
Timer set by [PROCESS] Legacy Kernel Caller expires at 4:00:02 AM on 1/20/2016.
Reason:
Timer set by [PROCESS] Legacy Kernel Caller expires at 3:59:00 AM on 1/20/2016.
Reason:
这是我在Command Line
窗口中看到的:
Timer set by [SERVICE] \Device\HarddiskVolume4\Windows\System32\svchost.exe (SystemEventsBroker) expires at 4:00:02 AM on 1/20/2016.
Reason: Windows will execute 'NT TASK\Microsoft\Windows\TaskScheduler\Regular Maintenance' scheduled task that requested waking the computer.
Timer set by [SERVICE] \Device\HarddiskVolume4\Program Files (x86)\Common Files\Acronis\Schedule2\schedul2.exe (AcrSch2Svc) expires at 3:59:00 AM on 1/20/2016.
所以我很好奇,该工具的 32 位和 64 位版本是否应该返回不同的结果?因为我可以解决这个问题并从我的 32 位进程中获取完整报告(以上第 2 版)的唯一方法是检测它以 WOW64 运行,然后使用以下路径进行强制 64 位重定向:
"C:\\Windows\\SysWow64\\powercfg.exe -waketimers"