я делаю следующее:DeleteFile из EXE сразу после Process.WaitForExit терпит неудачу
Скопировать исполняемый файл в
C:\temp\x.exe
Запустите исполняемый файл с
System.Diagnostics.Process.Start
, а затем ждать, пока процесс выхода синхронно , позвонив по телефонуWaitForExit
наProcess
объект, возвращенныйStart
.Удалить исполняемый
C:\temp\x.exe
На некоторых машинах, это прекрасно работает, но на других, призыв к DeleteFile
терпит неудачу, потому что файл все еще используется. Поэтому кажется, что как только WaitForExit
вернется, это не означает, что Windows выполнена с EXE.
Какие у меня варианты? Очевидным может быть повторение DeleteFile
через несколько миллисекунд позже, в цикле, до тех пор, пока удаление не завершится успешно или цикл не истечет. Но есть ли более чистый способ подождать, когда файл будет закрыт всеми?
Первый из них исключен; Я использую CopyFile, ничего необычного там, и ручки правильно закрыты. Это должна быть ОС, которая делает что-то за кулисами, вскоре после того, как она завершила процесс выполнения. Я реализовал цикл повтора, но я был недоволен этим. Полагаю, это может быть интересной задачей для дальнейшего изучения таких инструментов, как ProcMon. –