Мне что-то интересно. Я разрабатываю службу Windows и регистрирую все диагностические события в журнале событий Windows. Поэтому, когда служба работает, я открываю средство просмотра событий (из инструментов администрирования) для просмотра результатов моей службы.Windows Event Viewer хранит блокировку моего EXE-файла
Это прекрасно работает, за исключением момента, когда мне нужно удалить мою программу (опять же, для целей тестирования). По какой-то странной причине средство просмотра событий хранит блокировку в файле .exe для моей службы, поэтому деинсталлятор не работает чтобы удалить его с кодом ошибки ERROR_SHARING_VIOLATION
:
The process cannot access the file because it is being used by another process.
Это происходит только на Vista, и более поздних версий ОС и, кажется, не будет проблемой на XP.
Любая идея, как заставить Event Viewer освободить блокировку файла? (Я спрашиваю о программном подходе. Я могу закрыть его вручную, но это не то, что мне нужно.)
Средство просмотра событий открывает файл, чтобы получить доступ к строковым ресурсам (имена категорий, описания событий и т. Д.). Я думаю, вы могли бы попытаться закрыть файл из-под него, но это, вероятно, не будет хорошим пользовательским интерфейсом, если Event Viewer выйдет из игры. Это действительно большая проблема, чем это. Что делать, если какая-либо резервная или антивирусная программа имеет файл «заблокирован» в тот момент, когда вы пытаетесь его удалить? – Luke
@ Лука: Да, согласился. Хотя большинство из этих проблем исходят из плохо написанного программного обеспечения, например, 'acrotray.exe' или всех этих потенциальных AVP. Также нет никакой причины, чтобы Event Viewer сохранял блокировку файлов, даже если ему нужно получить доступ к ресурсам. Он может их прочитать, а затем отпустить блокировку файла (как в XP). – c00000fd
Возможно, вам стоит рассмотреть возможность размещения ресурсов в DLL ресурса. Тем не менее, эта DLL будет заблокирована Event Viewer. – MSalters