При установке программы на терминальном сервере под управлением Windows Server 2003, обратил внимание, что установка идет чрезвычайно долго. Вооружившись инструментами Process Explorer и Process Monitor от Sysinternals определил источник проблем.
Как оказалось, висит процесс MSIExec (Windows Installer) при этом потребляя много процессорного времени — полностью было загружено одно ядро на 100%.
Запустив Process Monitor и настроив его только для фильтрации событий от службы msiexec, увидел в логе событий много операций чтения из реестра:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TerminalServer\Install\RefHive\Hewlett-Packard\10004344-b104-4f54-269d-16f98f840ede
В примере приведен лишь один GUID из великого множества.
Запустив редактор реестра, обнаружил по пути (HKEY_USERS\.DEFAULT\Software\Hewlett-Packard) огромное количество записей подобных этим:
[HKEY_USERS\.DEFAULT\Software\Hewlett-Packard\10004344-b104-4f54-269d-16f98f840ede] "iJobCount"="1" "ShowJobStorageDlg"=hex:01 "PredefinedQuicksetCount"=dword:00000003 [HKEY_USERS\.DEFAULT\Software\Hewlett-Packard\10004344-b104-4f54-269d-16f98f840ede\HPBIDIInfo] "EACStatus"=dword:00000000 [HKEY_USERS\.DEFAULT\Software\Hewlett-Packard\10004344-b104-4f54-269d-16f98f840ede\HPCUSTOMForms]
Сделав бэкап ветки реестра, который оказался весом в 50 Мб, я удалил полностью ветку HKEY_USERS\.DEFAULT\Software\Hewlett-Packard.
После этого программа установилась в течении минуты.
Затем я из бекапа ветки рестра взял несколько строчек, которые были не связаны с GUID принтеров и импортировал их обратно.
[HKEY_USERS\.DEFAULT\Software\Hewlett-Packard\HP Print Settings] "CurrentProfile"="Default Location" "ReadInOldProfiles"=dword:00000001 "ReadInM1Profiles"=dword:00000001 "MystDeviceVerify"=dword:00000200 "ChangedPorts"=dword:00000003 [HKEY_USERS\.DEFAULT\Software\Hewlett-Packard\HP Print Settings\Default Location] @="Default Location"
Опытным путём выяснилось, что запись в реестре создается каждый раз, когда пользователь входит на терминальный сервер и подключается сетевой принтер. При повторном входе пользователя и подключении этого принтера создается еще одна запись в ветке HKEY_USERS\.DEFAULT\Software\Hewlett-Packard.