1

Тема: Установка соответствий программ для расширений файлов

Здравствуйте, я пользуюсь portable софтом, в том числе pdf/office читалками и редакторами.
Т.к. для того, чтобы софт был запущен правильно (т.е. в portable режиме) - для установки соответствия расширений файлам надо указывать не на саму программу, а на её portable launcher, что делает невозможным автоматическую установку привязок к поддерживаемым расширениям самой программой и приходится регистрировать всё вручную.
Хочется скрипт, который делал бы это автоматом.

Дано:
Лаунчеры находятся в той же папке, что и сам скрипт. Лаунчеры имеют статические, известные имена.

Задача скрипта:
1. получить путь к папке в которой находятся лаунчеры (и он сам)
2. прописать соответствия.

Помогите, пожалуйста.

2

Re: Установка соответствий программ для расширений файлов

Если я правильно понял, то имелись в виду ассоциировние расширений с обрабатываемыми их приложениями, при этом в роли последних выступают ланчуры. Если речь о батнике, то получить путь к каталогу, в котором лежит скрипт можно через %~dp0, а прописать ассоциации - использовать команду assoc. Более подробно по данным параметрам можно узнать из комстроки, выполнив команду hh ntcmds.chm (если ХР).

3

Re: Установка соответствий программ для расширений файлов

Но при этом не следует забывать, что при извлечении флешки нужно возвращать ассоциации с файлами на место.

4

Re: Установка соответствий программ для расширений файлов

greg zakharov пишет:

Если я правильно понял, то имелись в виду ассоциировние расширений с обрабатываемыми их приложениями, при этом в роли последних выступают ланчуры. Если речь о батнике, то получить путь к каталогу, в котором лежит скрипт можно через %~dp0, а прописать ассоциации - использовать команду assoc. Более подробно по данным параметрам можно узнать из комстроки, выполнив команду hh ntcmds.chm (если ХР).

попробовал в командной строке проверить ассоциацию, для, скажем pdf:

assoc .pdf

командная строка выдала

.pdf=AcroExch.Document

И так у всех расширений: для них написаны какие-то названия (fileType) уже зарегистрированных в систем хэндлеров, т.е. очевидно, что в системе где-то прописано, что-то типа fileType "AcroExch.Document" следует открывать программой, расположенной по какому-то пути (допустим c:/program files/acrobat reader/acrobat.exe), но где это прописывается? Куда и как добавлять такие связки?

5

Re: Установка соответствий программ для расширений файлов

Drugoy пишет:

очевидно, что в системе где-то прописано, что-то типа fileType "AcroExch.Document" следует открывать программой, расположенной по какому-то пути

все верно:

ftype AcroExch.Document
( 2 * b ) || ! ( 2 * b )

6

Re: Установка соответствий программ для расширений файлов

А почему у меня на компе прекрасно открывается .doc, а "assoc .doc" говорит "Не найдено сопоставление для расширения имени файла .doc."?
"assoc .docx" выдаёт ".docx=docxfile", а "ftype docxfile" выдаёт "docxfile="%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE" "%1", и при этом .docx у меня открывается тем же портабл ms офисом, что и .doc, а никаким не вордпадом.
Получается, это какие-то формальные регистрации расширений, а настоящая привязка - задаётся где-то ещё. Где?

7

Re: Установка соответствий программ для расширений файлов

Для ассоциаций есть две ветки в реестре: HKEY_LOCAL_MACHINE\SOFTWARE\Classes и HKEY_CURRENT_USER\Software\Classes. Последняя (ассоциации для текущего пользователя) имеет преимущество. Будет работать то, что написано в ней. Но команды assoc и ftype показывают ассоциации не из неё, а из HKEY_LOCAL_MACHINE, т.е. вариант для всех пользователей.

Есть ещё HKEY_CLASSES_ROOT, но она не самостоятельна, в ней отображаются те две ветки с учётом приоритета HKEY_CURRENT_USER.

8

Re: Установка соответствий программ для расширений файлов

и через командную строку, т.е. внести изменения в эти другие ветки - нельзя? значит bat не подойдёт а нужно что-то другое, что умеет читать-писать в реестр?

9

Re: Установка соответствий программ для расширений файлов

В батнике можно использовать команду reg. В командной строке наберите reg /? и почитайте справку. Например, вот такой код регистрирует для текущего пользователя расширение .xyz и ассоциирует тип файла xyzfile с программой Launcher.exe, лежащей в той же папке, где батник.

reg add HKCU\Software\Classes\.xyz /ve /d xyzfile
reg add HKCU\Software\Classes\xyzfile\shell\open\command /ve /d "\"%~dp0Launcher.exe\" \"%%1\""

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

10

Re: Установка соответствий программ для расширений файлов

Спасибо большое за помощь!