Сохранение состояния перед выключением с помощью .NET - PullRequest
2 голосов
/ 20 июля 2009

Я хотел бы сохранить состояние своей машины перед выключением (для машин, которые не поддерживают спящий режим).

По сути, я пытаюсь имитировать функцию Windows Hibernate. Когда машина снова включается, она выглядит точно так же, как и до выключения.

Есть идеи по использованию управляемого кода для выполнения этой задачи?

В настоящее время используется / рассматривается Windows XP Service Pack 2.

Ответы [ 3 ]

5 голосов
/ 20 июля 2009

Для всех приложений, работающих на вашем компьютере, это просто невозможно, используя чистый управляемый код. На самом деле, даже с неуправляемым кодом у вас будет адское время. Я бы не сказал, что это невозможно, но, вероятно, чрезвычайно сложно и требует много времени.

Вот несколько полезных ресурсов, с которых можно начать:

Арун Кишан в ядре Windows
http://www.dotnetrocks.com/default.aspx?ShowNum=434

основной дамп
http://en.wikipedia.org/wiki/Core_dump

SetContext
http://en.wikipedia.org/wiki/Setcontext

Раймонд Чен о "гибернации" отдельных процессов
http://blogs.msdn.com/oldnewthing/archive/2004/04/20/116749.aspx

Для вашего собственного приложения лучше всего выделить все состояния, которые вы хотели бы восстановить, в набор сериализуемых классов. Затем, когда ваше приложение выгружается (или периодически), сохраните эти данные на диск с помощью XMLSerializer. Когда ваше приложение загружается снова, снова используйте XMLSerializer для повторной гидратации ваших классов, содержащих состояние вашего приложения, и используйте эту информацию, чтобы вернуть пользовательский интерфейс в предыдущее состояние. Если у вас сложные пользовательские интерфейсы, это может занять много времени.

0 голосов
/ 21 июля 2009

Может быть API восстановления приложений Vista действительно помогает. Требуется Vista, хотя.

0 голосов
/ 20 июля 2009

вам придется сохранить его самостоятельно перед выходом из программы. Вы можете сериализовать все состояния Windows в XML и сохранить его в некотором файле. вы можете перезагрузить настройки при повторном запуске приложения.

...