Лучший способ, я думаю, специфичен для конкретной ситуации. В вашем случае создайте какой-нибудь формат, в котором вы можете сохранить ваш прогресс и сохранить его / обновить его в файл по мере вашего прогресса. Затем, после перезапуска, некоторая логика для определения, возобновить или перезапустить.
Кроме того, разбить программу на этапы, которые вы можете подделать или пропустить?
Чтобы сделать иначе, потребуется неэффективный и даже сомнительно возможный дамп памяти / реестра в «безопасных точках восстановления» и перезагрузка. Я думаю, что самая близкая вещь, реализованная для этого, это виртуализация всей среды с «моментальными снимками» (VMWare Workstation, Windows Virtual PC?). Это может быть вариант, но он будет почти таким же медленным.