Значок документа меняется после первого запуска в Windows

У меня есть приложение, которое устанавливается с помощью установщика Wise (EDIT: Wise создает файл Setup.exe, а не MSI). При установке устанавливается иконка для определенного типа файла:

HKEY_CLASSES_ROOT\.auz\DefaultIcon = C:\Path\To\App\some_icon.ico,0

Однако сразу после установки Explorer выбирает для отображения этого значка общий значок «белый лист + значок приложения», который отличается (и не предоставляется мной).

При первом запуске приложение само регистрирует значки и другие ассоциации файлов, так что последняя запущенная версия «владеет» этими документами. В этот момент Explorer изменяет значок для этого типа файла и отображает правильный, но когда я смотрю в реестр, значение DefaultIcon остается точно таким же.

Это то, что я пробовал до сих пор

  • Удаляю все записи из реестра и пишу их сам.
  • После установки «прикоснуться» к значению DefaultIcon, а затем запустить небольшую программу, которая вызывает только SHChangeNotify (SHCNE_ASSOCCHANGED) (моя программа делает это после обновления ассоциаций файлов в реестре).
  • После установки убиваем и перезапускаем Explorer.
  • После установки с помощью TweakUI «восстановить» значки на рабочем столе.

Ничего из этого не работает. Единственный способ получить правильный значок - позволить самой программе установить его. Я не могу найти никаких изменений в реестре. Я отрываю волосы.

Чего я бы хотел избежать

  • Тестирование с помощью другого установщика
  • Слишком частое изменение сценария установки (у меня нет самого Wise, так как программа установки создается на другом компьютере по запросу).
  • Вставьте значки в исполняемый файл.

Есть предложения, как заставить Explorer отображать правильный значок после установки?


person Carl Seleborg    schedule 09.01.2009    source источник


Ответы (2)


На ум приходит пара вещей:

  • почему у вас в реестре после значка стоит ', 0'? Это ограничит отображаемый значок одним значком. Лучше было бы иметь файл значков, который содержит несколько значков (один и тот же пользовательский интерфейс значка, но разные размеры / глубина цвета) - в проводнике есть разные представления значков! Попробуйте удалить ', 0', если в вашем файле значков есть только один значок.
  • может быть, в установщике реестр записывается в последнюю очередь после того, как проводник получил уведомление об обновлениях?
  • убедитесь, что запись в реестре записана после, когда файл значка сохранен на диске
  • вы должны использовать собственную конфигурацию Wise installers для регистрации типа файла. Не уверен, но я думаю, что проводник не будет вносить никаких изменений, пока не будет завершена вся установка msi, поэтому вызов SHChangeNotify () вручную не поможет. В msi для этого есть собственная таблица, которую Wise добавит, если вы используете правильную конфигурацию.

Для Wise сделайте следующее (вместо того, чтобы создавать ключи реестра самостоятельно):

  1. В группе страниц сведений о функциях выберите страницу сопоставлений файлов.
  2. В раскрывающемся списке Current Feature выберите Core.
  3. Нажмите «Добавить» в правой части окна и выберите «Создать». Появится диалоговое окно "Сведения о сопоставлении файлов".
  4. Щелкните вкладку Сведения о расширении.
  5. Перейдите в каталог QuickFacts, выберите файл QckFacts.exe и нажмите OK.
  6. В расширении введите: qft
  7. Оставьте значения по умолчанию для остальных полей и нажмите ОК. В установку добавлено расширение .QFT. Когда конечный пользователь дважды щелкает файл с этим расширением на конечном компьютере, запускается приложение QuickFacts.
  8. Сохраните установку

[Edit] Также могут отсутствовать необходимые записи в реестре (значка может быть недостаточно, чтобы оболочка отображала его):

HKEY_CLASSES_ROOT\.auz\(default) = auzfile
HKEY_CLASSES_ROOT\.auz\shell\open\command = C:\Path\To\App.exe
person Stefan    schedule 09.01.2009
comment
Стефан, спасибо за вклад. Кажется, что, 0 не является частью моей проблемы, так как программа пишет это, и она работает. Уведомление Explorer после установки тоже не помогает, поэтому гипотезы 2 и 3 также кажутся неверными. Но хорошие моменты. - person Carl Seleborg; 09.01.2009

Вот решение.

Каждый тип файла (скажем, в данном случае ".auz") был зарегистрирован с помощью:

  • DefaultIcon ключ с путем к ресурсу значка и
  • Значение HKEY_CLASSES_ROOT\.auz\(default), дающее описание типа файла, например «Документ Foobar».

В дополнение к этому, была запись для типа документа «Foobar Document» или, более конкретно, ключ для того, как открывать такие документы из оболочки:

HKEY_CLASSES_ROOT\Foobar Document\Shell\command\open\(default) = C:\Path\To\App.exe "%1"

Очевидно, этот ключ заменяет значение, записанное для конкретного расширения файла. Поскольку значки являются внешними по отношению к файлу .exe, проводник Windows затем использовал первый значок приложения для создания значка для всех файлов типа «Foobar Document» (тот значок «белый лист + значок приложения», о котором я упоминал).

Я ошибся в том, что само приложение меняет значение

HKEY_CLASSES_ROOT\.auz\(default)

на немного другое значение при запуске, скажем «Foobar 1.2 Document» (проблема в том, что он не СУХИЙ). Таким образом, ссылка на «Foobar Document» была потеряна, а файлы .auz получили свои иконки после первого запуска.

Итак, я исправил все это, просто полностью удалив клавишу HKEY_CLASSES_ROOT\Foobar Document и вуаля!

person Carl Seleborg    schedule 12.01.2009