Значок документа изменяется после первого запуска в Windows - PullRequest
1 голос
/ 09 января 2009

У меня есть приложение, которое устанавливается с помощью установщика 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) (моя программа делает это после обновления сопоставлений файлов в реестре).
  • После установки убивает и перезапускает Проводник.
  • После установки используйте TweakUI для «восстановления» значков на рабочем столе.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 12 января 2009

Вот решение.

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

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

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

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

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

Теперь, что я ошибся, так это то, что само приложение меняет значение

HKEY_CLASSES_ROOT\.auz\(default)

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

Итак, я все исправил, просто удалив ключ HKEY_CLASSES_ROOT\Foobar Document и voilà !

1 голос
/ 09 января 2009

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

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

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

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

[Изменить] Вы также можете пропустить обязательные записи в реестре (значок может не отображаться в оболочке):

HKEY_CLASSES_ROOT\.auz\(default) = auzfile
HKEY_CLASSES_ROOT\.auz\shell\open\command = C:\Path\To\App.exe
...