PDA

Показать полную графическую версию : [решено] Проблема автоматической ассоциации программ по умолчанию


Ska16
14-10-2015, 00:49
Добрый день. Обращаюсь за советом по поводу автоматической установки Windows 8.1. Добился, чтобы установка проходила от начала до конца без непосредственного участия (при помощи Autounattend.xml), сделал, чтобы пакет необходимых программ, их настроек и настроек самой системы также устанавливались в тихом режиме (с помощью bat-файла). Единственное, что не смог побороть - автоматическую ассоциацию расширений с установленными программами.

Начиная с Windows 8 данный процесс требует участия пользователя, предлагая ему в ручную выставить галочки во время установки конкретной программы, что отличается от WinVista/Win7, где установщик без проблем присваивает программе необходимые расширения самостоятельно. Из того, что удалось разузнать в данном направлении, нашлась лишь групповая политика "Задать файл конфигурации сопоставлений по умолчанию", работа которой описывается к примеру здесь (https://technet.microsoft.com/ru-ru/library/mt269907.aspx).

Если вкратце, то сначала вручную выставляются все ассоциации, затем они экспортируются в xml-файл и после при помощи групповой политики в реестре задаётся путь до этого файла, согласно которому при каждом входе в учётную запись прописываются необходимые ассоциации. К сожалению, судя по описанию и проведённым тестам данная политика применяется лишь к компьютерам, находящимся в домене, т.е для обычных домашних машин она не годится.

Вполне возможно, я что-то упускаю из-за нехватки знаний и эту политику всё же можно заставить работать на компьютерах, не находящихся в сети, но на данный момент других вариантов решить задачу в голову не приходит. Подскажите, может кто-то сталкивался с данным вопросом и что можно сделать?

Vadikan
14-10-2015, 11:23
Ska16, когда я писал свою статью (http://www.outsidethebox.ms/14267/#_Toc342245007) 3 года назад, все работало и без домена. Вы политикой пытаетесь применить? Перечитайте мои инструкции, пробуйте из консоли и не упускайте из виду Все учетные записи, созданные после импорта параметров, получают заданные настройки ассоциаций файлов!

Ska16
14-10-2015, 14:43
Вы политикой пытаетесь применить?
Изначально я пытался просто прописать ключ реестра, который задаёт данная политика. Насколько я понимаю, политика служит лишь для задания данного ключа и системе не принципиально, руками был введён ключ или через политику. Поправьте, если не прав.
Все учетные записи, созданные после импорта параметров, получают заданные настройки ассоциаций файлов!
Т.е. если я правильно понимаю ход ваших мыслей, при добавлении следующего блока в проход specialize, учётная запись, которая создаётся в ходе процесса установки получит необходимые ассоциации?
<RunSynchronousCommand wcm:action="add">
<Order>4</Order>
<Description>Copy Default Associations file</Description>
<Path>cmd /c "copy /y %USBRoot%\!soft\!tools\Windows\!win8.1\xml\FileAssociations32.xml %WINDIR%\System32"</Path>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Order>5</Order>
<Description>Set Default Associations</Description>
<Path>cmd /c "reg add HKLM\Software\Policies\Microsoft\Windows\System /v DefaultAssociationsConfiguration /t REG_SZ /d %WINDIR%\System32\FileAssociations32.xml /f"</Path>
</RunSynchronousCommand>

Ska16
20-10-2015, 03:24
Vadikan, попробовал сделать вышеописанным методом - в рамках прохода specialize с флешки копируется xml-файл с ассоциациями по адресу C:\Windows\System32, следом прописывается ключ реестра DefaultAssociationsConfiguration с путём до этого файла, что собственно и делает политика "Задать файл конфигурации сопоставлений по умолчанию".

По появлению рабочего стола проверяю - файл скопировался, ключ в реестре присутствует. Пробую установить одну из сторонних программ, которой предполагается открывать прописанные в файле расширения (XnView, Media Player Classic BE в данном случае). После их установки при попытке открыть *.jpg либо *.avi файл, система открывает окно с предложением выбрать программу, которой я хотел бы открывать данный тип файла. Т.е не сработало. Пробовал перезагружаться, пробовал повторно прописывать ключ реестра и следом перезагружаться, результат всё тот же. Ещё попробовал перенести операции в раздел FirstLogonCommands, что также не дало положительного результата. Очень бы хотелось услышать ваши комментарии.

Vadikan
20-10-2015, 14:57
Ska16,
Зачем вам политика, если она для доменных ПК, а у вас домена нет?

В моей статье же ясно написано:
1. Настройте ассоциации на эталонном ПК
2. Экспортируйте XML
3. Выполняйте команду DISM с этим XML на целевом ПК

Сначала проверьте на уже загрузившейся системе: выполните шаг 3 > добавьте пользователя.
Если работает, используйте SetupComplete.cmd.

Ska16
27-10-2015, 05:17
Всё в итоге получилось. Vadikan, спасибо за подсказку.

В SetupComplete.cmd прописал установку всех необходимых программ, а в конце прописал команду Dism.exe /Online /Import-DefaultAppAssociations:<путь\файл с ассоциациями.xml>Команду нужно прописывать после установки списка программ, чьи расширения нужно ассоциировать, т.к. судя по всему Windows проверяет фактическое наличие установленной программы, указанной в файле рядом с расширением.

В итоге установка Windows отработала SetupComplete.cmd, создала пользователя основываясь на данных, внесённых в AutoUnattend.xml и автоматически в него зашла - все необходимые форматы открываются согласно импортированным ассоциациям.

Кстати, есть небольшой нюанс. В зависимости от разрядности установленной программы, идентификатор расширения может отличаться. Вот например у Media Player Classic BE <Association Identifier=".avi" ProgId="mpc-be.avi" ApplicationName="MPC-BE" />
<Association Identifier=".avi" ProgId="mpc-be64.avi" ApplicationName="MPC-BE x64" />Соответственно, если программа установится 64-битная, а в файле с ассоциациями у вас будет прописана привязка к 32-битной программе, то расширение не будет ассоциировано. Пробовал прописать оба варианта в xml-файл, но система привязывает тот, что ниже по списку в файле.

Получилось обойти при помощи одного из способов определения разрядности установленной системы, описанных в этой (http://forum.oszone.net/post-1388293.html) теме. В SetupComplete.cmd прописываем скрипт опеределения разрядности системы, а на основании полученных данных запускаем команду импорта файла с ассоциациями для x86 либо x64.




© OSzone.net 2001-2012