Привет! Подскажите, как можно это сделать? Проблема в том, что файлы старой версии могут использоваться существующими приложениями (вроде запущенного Wireshark, или приложением, находящимся в Autorun). В таком случае установщик WinPCap выдает ошибку - не возможно заменить *.DLL файлы старой версии. Как я могу освободить dll от процессов которые ее используют? Или, наверное, более правильный вопрос: как узнать какие процессы используют библиотеки WinPCap'а? (при установке моего прилождения буду предупреждать user'a о том что все использующие приложения будут закрыты). У меня админские права Спасибо
В принципе, можно так (не знаю, по-моему коряво): Toolhelp функциями перечисляете процессы, в них внедряетесь (CreateRemoteThread т.е через DLL), потом копаете таблицу импорта внутри. Есть уже готовое решение (что неудивительно). Как раз для этих целей. Unlocker что ли обзывается...
Перебирать процессы и в каждом искать промапленные файлы: VirtualQueryEx - GetMappedFileName Но лучше использовать другой метод: при обнаружении, что wpcap.dll занята - переименовать ее wpcap_tmp.dll (MoveFile) и записать новую wpcap.dll... в конце установки - запросить у юзера перезагрузку компа + еще смотрите в сторону MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT ..
Я думал зделать вот так: попросить пользователя перезагрузить компютер и сразу после загрузки запустить инсталлятор WinPCap, когда его библиотеки еще никем не используются. Но тогда возникает такой вопрос: как запустить инсталлятор winpcap раньше чем запуститься любой процесс из авторанов?
Всем спасибо, как оказалось, RunOnce блокирует загрузку всех "Run" компонетов системы вместе с эксплорером пока процесс указанный в RunOnce не завершится.