Изменение значков для защищенных расширений файлов в Windows 10

6

Цель состоит в том, чтобы файлы .jpg, .png, .tif и .raw всегда открывались в Photoshop CC 2015 и использовались соответствующие значки.

пример

Вы можете обратиться к блок-схеме ниже о том, как Windows 10 выбирает значок для файла. Я придумал это, внеся изменения в реестр и наблюдая за результатами.

(нажмите, чтобы увеличить) Flowcart

Проблемы

  • Если расширение связано с типом файла, значок по умолчанию, определенный ключом расширения, игнорируется.
  • Тип файла, определенный значением UserChoiceключа, ProgIdпереопределяет тип файла, определенный ключом расширения.
  • UserChoiceProgIdзначение ключа устанавливается Application/Photoshop.exeпри установке Photoshop как всегда открытого приложения для .jpg и .png.
  • Невозможно изменить значение UserChoiceключа ProgIdиз-за новой безопасности хэша
  • Не удается удалить UserChoiceключ для защищенных расширений, таких как .jpg и .png

Вопросы / Возможные решения

  1. Есть ли способ переопределить значок, определенный типом файла на уровне расширения?
  2. Есть ли способ переопределить тип файла, определенный UserChoiceключом на уровне расширения?
  3. От чего зависит, какое значение UserChoiceключа ProgIdбудет установлено при настройке приложения, всегда открытого с помощью графического интерфейса, и почему .tif приводит к тому, что, в Photoshop.TIFFFile.90то время как .png и .jpg приводят к Application/Photoshop.exe?
  4. Есть ли способ генерировать хэш, необходимый для UserChoiceключа?
  5. Есть ли способ запретить Windows проверять / запрашивать UserChoiceхэш ключа?
  6. Есть ли способ указать тип файла, например, Photoshop.JPEGFile.90как всегда открытое приложение с помощью графического интерфейса?
  7. Есть ли способ остановить Windows от защиты / воссоздания UserChoiceключей?

Заметки

Изменения в реестре не вступят в силу, пока explorer.exe не будет перезапущен / обновлен. Вы можете использовать диспетчер задач, чтобы убить и перезапустить explorer.exe, или вы можете использовать DesktopRefresh.exe .

UserChoiceКлюч может существовать в двух местах:

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\Roaming\OpenWith\FileExts\.jpg\UserChoice

Если один не существует, другой используется. Поэтому обязательно удалите / измените их оба, если вы хотите внести изменения.

Примеры ключей:

  • ключ расширения: HKCR\.jpg
  • ключ типа файла: HKCR\Photoshop.JPEGFile.90
  • UserChoice ключ: HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice

подробности

Когда Photoshop впервые был установлен, он связывал все расширения файлов, и все было замечательно. В какой-то момент я решил, что хочу всегда открывать файлы .png, .jpg, .tif и .raw с помощью приложения Photos. Поэтому я: щелкните правой кнопкой мыши файл .png / .jpg / .tif / .raw -> Открыть с помощью -> Выбрать другое приложение -> Выбрать фотографии -> Отметьте «Всегда открывать файлы .png с этим приложением». Теперь я хочу вернуться к открытию с Photoshop. Я сделал то же, что и раньше, ожидал, выбрал Photoshop в качестве приложения, чтобы всегда использовать. Теперь файлы .jpg, .png, .tif и .raw открываются в Photoshop. Однако в файлах .tif отображается правильный значок, а в файлах .jpg, .png и .raw - значок Photoshop.exe.

Я попытался переустановить Photoshop, но это не помогло. Я пытался использовать Adobe Bridge для сброса ассоциаций файлов, но это тоже не помогло. Такие инструменты, как Диспетчер типов файлов и Редактор программ по умолчанию, не работают (я объясню почему ниже).

Затем я начал изучать, как Windows 10 выбирает значок, отображаемый для данного файла. Я научился:

  1. Если расширение связано с типом файла, используется значок, определенный этим ключом типа файла. В противном случае используется значок, определенный ключом расширения.
  2. Расширение может быть связано с типом файла двумя способами: Если для расширения была установлена ​​программа / приложение, всегда открытое с помощью, то программа / приложение используется в качестве типа файла для расширения. В противном случае тип файла может быть определен ключом расширения.

В моем случае для файлов .jpg, .png, .tif, .raw Photoshop был установлен как приложение, которое всегда открыто. Это отражается в реестре через

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.png\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.raw\UserChoice

ключи. Вот где разница между .tif и .jpg / .png / .raw показывает. .tif имеет ProgIdзначение Photoshop.TIFFFile.90while .jpg, .png и .raw имеют Applications\Photoshop.exe. Это означает, что .tif правильно связан с Photoshop.TIFFFile.90типом файла, но .jpg .png и .raw связаны с типом файла Applications\Photoshop.exe.

Я не могу просто изменить значок для Applications\Photoshop.exeтипа файла, потому что .jpg, .png и .raw все используют этот тип файла. Таким образом, один и тот же значок используется 3 расширениями. Я не могу указать уникальный значок для каждого расширения. Вот почему инструменты Диспетчер типов файлов и Редактор программ по умолчанию не работают. Они устанавливают DefaultIcon для типа файла в этом случае.

Решение казалось простым: изменить ProgIdзначение в UserChoiceключах , чтобы использовать Photoshop.JPEGFile.90, Photoshop.PNGFile.90и Photoshop.RAWFile.90тип файлов. Это невозможно в Windows 10 больше. Новая мера безопасности добавляет Hashзначение, которое сопровождает ProgIdзначение в UserChoiceключе. Только Windows знает, как генерировать этот хэш. Если хеш-код не соответствует ProgIdзначению, Windows сбрасывает / удаляет UserChoiceключ. Это позволяет установить это значение только через графический интерфейс Windows. Идея состоит в том, чтобы не дать вирусам / злоумышленникам возможность программно изменять всегда открытое приложение для расширений.

Я понятия не имею, почему выбор Photoshop в качестве приложения, которое всегда открыто, привело к правильной ProgIdнастройке для .tif, но не для .jpg, .png и .raw, но это не представляется возможным исправить. В этот момент я начал смотреть на другие расширения, которые я не трогал, как .tga. Я никогда не устанавливал всегда открытое приложение для .tga, поэтому у него не было UserChoiceключа. Вместо этого ключ расширения .tga определил связанный тип следующим образом:

[HKCR\.tga]
@="Photoshop.TGAFile.90"

Другое, казалось бы, простое решение: отмените приложение, всегда открытое с помощью удаления UserChoiceключей и определите тип файла на ключах расширения. Это работало для .raw, но не для .jpg и .png. Когда я удалил UserChoiceключи для .jpg и .png, я получил уведомление Windows с этой ошибкой:

Приложение по умолчанию было сброшено

Приложение вызвало проблему с настройкой приложения по умолчанию для файлов .jpg, поэтому оно было сброшено до Фотографии

Я обновил реестр и, конечно же, UserChoiceключ вернулся. Оказывается, что Windows защищает некоторые расширения (например, .jpg и .png) и не позволяет удалить UserChoiceключ.

Таким образом, мы не можем удалить UserChoiceключ, мы не можем обновить его UserChoice.ProgIdдо правильного значения, и мы не можем переопределить тип файла, указанный UserChoice.ProgId... что сейчас?

Майк
источник

Ответы:

2

Я нашел хакерский обходной путь, но я все еще хотел бы получить ответы на мои вопросы выше, чтобы мы могли найти правильное / менее хакерское решение.

Шаг за шагом для начинающих.

Создайте фиктивный файл .cmd и установите его как приложение, всегда открытое для расширения, использующего графический интерфейс. Это приводит к тому, что Windows создает новый тип файла для фиктивного «приложения» .cmd и связывает его с расширением, устанавливая значение UserChoiceключа ProdId(например:) Application/customJPEG.cmd. Повторите этот процесс для каждого расширения с использованием уникальным именем фиктивного CMD - файл и, бац, у нас есть уникальные типы файлов , связанных с каждым расширением (например: Application/customJPEG.cmd, Application/customPNG.cmdи т.д.). Затем мы можем настроить значок и команды открытия / редактирования независимо для каждого нового типа файла.

См. Мою блок-схему в исходном вопросе для получения дополнительной информации о том, как Windows выбирает значок для файла.

Примечание. Этот обходной путь требуется только для защищенных расширений, таких как .jpg и .png. Смотрите мой вопрос выше для решения незащищенных расширений. Однако этот обходной путь должен работать для любого расширения независимо.



Быстрый словарь:

  • Расширение файла : Что следует за последней точкой в ​​имени файла. .jpg, .jpeg, .png и т. д. - это разные расширения файлов.
  • Тип файла : классификация файлов / категории. Может быть связано с одним или несколькими расширениями файлов. Например, тип файла JPEG может быть связан как с расширениями файлов .jpg, так и .jpeg.

Примечание. Расширения файлов изображений, такие как .jpg и .png, показывают миниатюры изображения. Чтобы увидеть значок, либо создайте пустой файл (чтобы эскиз не мог быть создан), либо откройте окно проводника и установите для параметра «Вид» значение «Подробности».

Примечание. Ничего не изменится, пока вы не обновите рабочий стол. Обязательно сделайте это после внесения изменений в реестр. Смотрите шаг 6 для деталей.

Примечание. Если в реестре отсутствует ключ, попробуйте обновить его, нажав клавишу F5 или View-> Refresh. regedit не обновляется и требует обновления, чтобы увидеть последние новости.


Повторите шаги ниже для каждого расширения файла. Замените .jpg вашим расширением файла, а Photoshop - любым приложением, которое вы хотите.

1. Создайте фиктивный файл .cmd

  1. Открыть блокнот
  2. Вы можете оставить файл пустым
  3. Файл-> Сохранить как
  4. Используйте что-то вроде customJEPG.cmdимени файла и сохраните

Неважно, где вы сохраняете его или как его называете, ожидайте, что имя должно отличаться для каждого типа файла . Имя фиктивного .cmd будет определять имя типа файла. Я рекомендую включить в название расширение или тип файла, чтобы его было легче различить позже.

2. Установите фиктивный файл .cmd как приложение, которое всегда открыто

  1. Щелкните правой кнопкой мыши файл .jpg.
  2. Открыть с помощью-> Выбрать другое приложение
  3. Убедитесь, что установлен флажок «Всегда использовать это приложение для открытия файлов .jpg»
  4. Прокрутите вниз и нажмите «Другие приложения ↓»
  5. Снова прокрутите вниз и нажмите «Найти другое приложение на этом ПК».
  6. Найдите и выберите ваш фиктивный файл .cmd
  7. Проигнорируйте и закройте ошибку «Это приложение не может работать на вашем компьютере»
  8. Если "Как вы хотите открыть этот файл?" Снова откроется окно, убедитесь, что ваш фиктивный файл .cmd по-прежнему выбран в разделе «Продолжать использовать это приложение» вверху, установите флажок «Всегда использовать это приложение для открытия файлов .jpg» и нажмите «ОК».

Если вы хотите, чтобы несколько расширений файлов использовали один и тот же тип файла, повторите шаги 1-7 выше для каждого расширения.

3. Получить новый связанный тип файла

  1. Открыть регедит
  2. Перейдите к:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\UserChoice
  3. Скопируйте / запишите значение ProgId. Это тип файла, который теперь связан с расширением .jpg.

Тип файла должен быть Applications\{the name of your dummy .cmd}. Пример: Applications\customJPEG.cmd.

4. Обновите тип файла, чтобы использовать правильный значок

  1. В regedit перейдите к HKEY_CLASSES_ROOT\
  2. Теперь откройте ключ с тем же именем, что и ваш тип файла. Например, если у вас тип файла Applications\customJEPG.cmd, вы откроете:
    HKEY_CLASSES_ROOT\Applications\customJEPG.cmd
  3. Создайте новый ключ внутри с именем DefaultIcon
  4. Установите значение DefaultIconключа (по умолчанию) для пути к значку, который вы хотите использовать. Пример:
    E:\Tools\Adobe\Adobe Photoshop CC 2015\Photoshop.exe,30

5. Обновите тип файла для открытия и редактирования с помощью Photoshop.

  1. Откройте shell\open\commandключ внутри вашего ключа типа файла. Пример:
    HKEY_CLASSES_ROOT\Applications\customJEPG.cmd\shell\open\command
  2. Измените значение (по умолчанию), чтобы оно указывало на ваш Photoshop.exe вместо вашего фиктивного файла .cmd. Пример:
    "E:\Tools\Adobe\Adobe Photoshop CC 2015\Photoshop.exe" "%1"
  3. Создайте edit\commandключ внутри shellключа, если он не существует. Пример:
    HKEY_CLASSES_ROOT\Applications\customJEPG.cmd\shell\edit\command
  4. Измените значение (по умолчанию), чтобы оно совпадало с вашим open\commandключом. Пример:
    "E:\Tools\Adobe\Adobe Photoshop CC 2015\Photoshop.exe" "%1"

6. Обновите рабочий стол

Вы ничего не увидите, пока не обновите рабочий стол. Есть 3 способа сделать это:

  • В Windows 10 запустить ie4uinit.exe -show. В Windows 7 и 8 запустить ie4uinit.exe -ClearIconCache. (Спасибо @Tony за этот совет.)
  • Или вы можете просто загрузить и запустить DesktopRefresh.exe
  • Или вы можете перезапустить explorer.exe:

    1. Откройте диспетчер задач (ctrl + shift + esc)
    2. Перейдите на вкладку сведений и найдите explorer.exe
    3. Щелкните правой кнопкой мыши explorer.exe-> Завершить задачу и нажмите Завершить процесс
    4. Еще в диспетчере задач зайдите в File-> Run new task
    5. Введите explorer.exeи нажмите ОК

7. Проверьте это

  1. Теперь для файлов .jpg должны отображаться правильные значки.
  2. Двойной щелчок по файлу .jpg должен открыть его в Photoshop.
  3. Щелкните правой кнопкой мыши файл .jpg -> Изменить, чтобы открыть его в Photoshop.

Если "Как вы хотите открыть этот файл?" Снова откроется окно, убедитесь, что ваш фиктивный файл .cmd по-прежнему выбран в разделе «Продолжать использовать это приложение» вверху, установите флажок «Всегда использовать это приложение для открытия файлов .jpg» и нажмите «ОК».

8. Удалить пустышку .cmd

Вы можете удалить свой фиктивный файл .cmd. Это необязательно.


Примечание о поиске значков

Часто .exe приложения содержит несколько значков. Например, Photoshop.exe содержит все значки для всех различных типов файлов, которые он поддерживает. Вот как найти и использовать эти значки:

  1. Создайте ярлык для .exe, щелкнув правой кнопкой мыши и выбрав Создать ярлык
  2. Щелкните правой кнопкой мыши по ярлыку и выберите «Свойства».
  3. Нажмите кнопку «Изменить значок» внизу
  4. Теперь вы увидите окно, подобное этому (но без цифр):
    Окно иконок
  5. Значки нумеруются, начиная с 0. Найдите номер значка, который вы хотите использовать. Вместо подсчета вы можете использовать формулу (column - 1) * 4 + row - 1. Например, если значок находится в столбце 6, строке 3,(6 - 1) * 4 + 3 - 1 = 22
  6. Теперь вы можете ссылаться на этот значок, включив номер в путь к .exe, например:
    C:\Example\Photoshop.exe,23
Майк
источник
1
Ого! ... с годами все стало слишком сложно! Большое спасибо за публикацию подробностей ваших выводов. Помог мне исправить значок на моей машине. Нашли ли вы какие-либо инструменты, которые делают это проще?
17
1

Ну, ответ Майка очень хороший. И, как дополнение, на шаге 6 (Обновить рабочий стол) вы можете просто запустить эту команду:

ie4uinit.exe -show

для Win10, чтобы перезагрузить новый значок.

Для Win 7 и 8 запустить:

ie4uinit.exe -ClearIconCache
Стивен Раух
источник