jameszero,
В аддоне в файле IE7int.inf есть такая секция (я хвост обрезал, вы и так поймете

):
Код:

[RenameOperation.AddReg]
HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","AllowProtectedRenames",0x00010001,01,00,00,00
HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010000,"\??\%11%\DllCache\new_imgutil.dll"................"
Так вот такая запись добавления строк в PendingFileRenameOperations не корректна, поскольку перезаписывает все, что туда могли добавить другие программы раньше, чем выполнялся ваш ИНФ.
Кроме того, если добавлять туда строки через ИНФ-файл с помощью ключа типа
REG_SZ_APPEND (0x00010008), то добавление работает, но есть один побочный эффект:
В этом ключе запись на обработку одного файла занимает две строки, из которых первая - исходное имя файла, а вторая - новое имя. Но если производится удаление файла, то вторая строка будет пустая, и реально состоять из одного нулевого символа. Так вот движок, обрабатывающий ИНФ-файлы, вставляет новые строки, добавляемые через тип строки
REG_SZ_APPEND начиная с позиции первой нулевой строки, например:
Если было:
Код:

\??\C:\File1.ext
\??\C:\File2.ext
\??\C:\File3.ext
(в конце, после File3.ext – нулевая строка)
Что означало удаление трех файлов в корне диска С.
То после добавления из ИНФ файла такого куска, переименовывающего еще два других файла:
Код:

HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010008,"\??\D:\File5.ext"
HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010008,"\??\D:\File6.ext"
HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010008,"\??\D:\File7.ext"
HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","PendingFileRenameOperations",0x00010008,"\??\D:\File8.ext"
В реестре получится следующая каша в этом ключе:
Код:

\??\C:\File1.ext
\??\D:\File5.ext
\??\D:\File6.ext
\??\D:\File7.ext
\??\D:\File8.ext
Что будет означать переименование File1.ext в File5.ext, File6.ext в File7.ext, а файл File8.ext вообще останется "подвешенным в воздухе".
Этот баг где-то описан у Майкрософта в MSDN (убейте меня, но не помню, где именно….)
Единственный способ корректной обработки этого ключа – это WinApi функция MoveFileEx с параметром MOVEFILE_DELAY_UNTIL_REBOOT, вызываемая из какой-либо программы.
Для переименования файла используется вызов:
MoveFileEx(FileName1, FileName2, MOVEFILE_DELAY_UNTIL_REBOOT)
А для удаления файла – вызов:
MoveFileEx(FileName1, NULL, MOVEFILE_DELAY_UNTIL_REBOOT)
Функция корректно производит стыковку новых добавляемых строк с существующими старыми, добавленными раньше.
Обратите внимание еще на то, что если такой же метод переименования файлов через ИНФ-файл, как и у вас, используется и в других аддонах, то аддоны будут мешать друг другу, и ключ в реестре будет перезаписан аддоном, который последним производил запись в ключ.
И можно до умопомрачения биться головой об стену выискивая глюки в своем аддоне, при том, что он сам по себе, на тестовой установке (на виртуалке например) работает корректно.
