Если я перезагружу Windows, пока сторонний процесс заблокировал файл, будет ли блокировка автоматически снята?
Под сторонними я подразумеваю любые процессы, не относящиеся к Windows, например, мое программное обеспечение или программное обеспечение других поставщиков.
Если да, то это 100% или зависит от обстоятельств?
решение1
Да. Windows дает каждой программе WaitToKillAppTimeout
секунды на завершение работы (по умолчанию20):https://technet.microsoft.com/en-us/library/cc978624.aspx
После этого он закрывает все программы. Все файлы освобождаются, обработчики файлов становятся недействительными и Windows завершает работу.
решение2
Прежде всего,да, согласно ответу, предоставленному @user996142
Если подробнее остановиться на моем комментарии относительно сетевых процессов, то ответ будет "в конечном итоге, да". Любой доступ к вашим файлам через сеть фактически блокирует файл косвенно. Хост-процесс на вашей машине (например, любой процесс, стоящий за общим доступом SMB) фактически блокирует файл. Если что-то обращается к этому файлу, и вы принудительно переводите его в спящий режим или приостанавливаете работу, при возобновлении он все равно будет заблокирован, пока процесс SMB не заметит, что клиент больше не подключен, и не снимет блокировку. Я не уверен в сроках, но Microsoft, похоже, предпочитает тайм-аут по умолчанию в 2 минуты.