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

StackOverflow https://stackoverflow.com/questions/428121

Вопрос

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

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

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

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

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

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

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

Чего бы мне хотелось избежать

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

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

Это было полезно?

Решение 2

Вот решение.

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

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

Помимо этого там была запись типа документа «Документ 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 Document» (проблема с тем, что он не DRY).Таким образом, ссылка на «Документ Foobar» потерялась, а файлы .auz получили свои иконки уже после первого запуска.

Поэтому я все это исправил, просто удалив HKEY_CLASSES_ROOT\Foobar Document ключ в целом, и вуаля!

Другие советы

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

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

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

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

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

HKEY_CLASSES_ROOT\.auz\(default) = auzfile
HKEY_CLASSES_ROOT\.auz\shell\open\command = C:\Path\To\App.exe
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top