Я пытался позвонить Powercfg инструмент из моего 32-разрядного приложения, работающего на 64-разрядной версии Windows 8.1 с использованием 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-разрядные версии этого инструмента возвращать разные результаты? Потому что единственный способ исправить это и получить полный отчет (2-я версия выше) от моего 32-разрядного процесса — это определить, что он работает как WOW64, а затем использовать следующий путь для принудительного 64-разрядного перенаправления:
"C:\\Windows\\SysWow64\\powercfg.exe -waketimers"
Задача ещё не решена.
Других решений пока нет …