Я делаю простую программу, которая копирует файлы, созданные или измененные с момента последнего запуска. Как лучше всего сохранить время последнего запуска самой программы? Я думал, что у него может быть текстовый файл, в котором он будет хранить дату и время, но есть ли способ, который не требует внешних файлов? В Windows есть дата «последнего изменения», но я не знаю дату «последнего использования».
Как программа может запомнить время своего последнего запуска?
Ответы (2)
Я думаю, что любой метод требует файла или модифицированного файла, включая метод реестра, предложенный в комментариях. Хотя технически это файл, возможность альтернативного потока данных файловых систем NT является одним из методов. Вот хорошее описание. http://www.bleepingcomputer.com/tutorials/windows-alternate-data-streams/
person
kenny
schedule
24.08.2012
Итак, ваше предложение состоит в том, чтобы хранить альтернативный поток данных для самого исполняемого файла? Это не только больше работы, но и потребует нескольких записей (по одной для каждой учетной записи пользователя) и дополнительной информации (какой пользователь запускал ее последним). Я не думаю, что это жизнеспособный вариант для заданного вопроса. (Не отрицаю, но полностью не согласен со стратегией.)
- person Ken White; 24.08.2012
@KenWhite Petty легко иметь один поток для каждого пользователя с одной последней датой выполнения, но я не думаю, что это хороший способ решить проблему, но это способ. Практически в любом случае потребуется какой-то файл и, как вы предлагаете, запись для каждого пользователя.
- person kenny; 24.08.2012
Это только кажется, что это слишком сложное решение для заданного вопроса. Что делать, если у пользователя нет прав на запись в исполняемый файл? Если вопрос так же прост, как сохранить последний файл, который запускал приложение, кажется, что быстрая запись файла в локальную папку или папку перемещаемого профиля локального пользователя была бы намного лучше (тем более, что автор даже не знал, как выполнить задачу вообще).
- person Ken White; 24.08.2012
@KenWhite хорошие моменты в области безопасности. Я не понимаю вашей сложной вещи. Я могу писать в альтернативный поток из командной строки, и это так же просто, как запись любого файла.
- person kenny; 24.08.2012
:-) Я знаю. Сложность возникает из-за прикрепления нескольких альтернативных потоков к одному и тому же файлу, что означает, что теперь вам нужно как-то идентифицировать их с текущим пользователем (APPDATA это уже знает), есть проблемы с копированием файла (сопутствуют ли альтернативные потоки или вы оставь их и начни сначала). Я говорил не о сложности написания самих потоков, а о другой сложности.
- person Ken White; 24.08.2012
Хорошо, я понимаю, о чем вы говорите, но это «это зависит». Я могу видеть сценарии, в которых у вас есть одно и то же приложение в разных местах, которое вы хотите отслеживать «при последнем запуске». В этот момент подход репозитория APPDATA становится слишком сложным. Хорошие моменты во всем и во всем, и предоставление информации OP - это неплохо.
- person kenny; 24.08.2012
Я делаю простую программу, которая копирует файлы, созданные или измененные с момента последнего запуска.
Для этого используется флаг архива. Windows будет автоматически устанавливать этот флаг всякий раз, когда файл создается или изменяется.
Ваша программа просто должна пропускать файлы с установленным флагом архива, затем копировать и сбрасывать флаги архива для оставшихся файлов.
person
Branko Dimitrijevic
schedule
24.08.2012
Если вы сбросите его, обычные резервные копии не обнаружат изменения и не создадут их резервную копию (особенно при добавочном резервном копировании).
- person Ken White; 24.08.2012
@KenWhite Я не думаю, что обычная резервная копия Windows больше использует этот флаг. Все неизмененные файлы, резервные копии которых создаются на моей машине, похоже, имеют установленный бит архива. Конечно, могут быть и другие программы резервного копирования, которые все еще используют этот флаг...
- person Branko Dimitrijevic; 24.08.2012
Резервное копирование Windows? Кто-нибудь реально этим пользуется? ;-) Я не голосую против, но это также не обрабатывает ситуацию для каждого пользователя (и требует доступа на запись ко всем задействованным файлам, чтобы перевернуть бит архива - кто-нибудь UAC?).
- person Ken White; 24.08.2012
HKEY_CURRENT_USER
, поскольку время последнего запуска может различаться у разных пользователей), либо в файле в пользовательской папке%APPDATA%
. - person Ken White   schedule 24.08.2012