Хотел озвучить одну вещь, которая меня крайне раздражает в некоторых программах, а именно нежелание за собой чистить реестр после деинсталляции и после окончания работы. На днях очень тесно столкнулся с этим. У пользователей наш dotTrace переставал нормально работать сразу после использования сторонних профайлеров (однозначно это было замечено за YourKit и ANTS от RedGate).
Так в чем же было дело? Оказалось, что данные программы после профиляции оставляют в нескольких местах реестра ключи отвечающие за старт профайлера, а именно COR_PROFILER, COR_ENABLE_PROFILING. Что во первых заставляет CLR искать соответствующий COM объект при каждом старте программы даже если самого объекта уже давно нету в системе, а во вторых мешает работе другим программам. Все дело в том что есть некий порядок на основании которого происходит выборка каждой конкретной переменной в окружении:
- HKLM\Software\Microsoft\.NETFramework (32-bit or 64-bit)
- HKLM\System\CurrentControlSet\Control\Session Manager\Environment (глобальные переменные окружения)
- HKCU\Environment (переменные окружения текущего пользователя)
- HKLM\System\CurrentControlSet\Services\your_service [Environment] (в случае старта .NET сервиса)
No comments:
Post a Comment