ASSOC i FTYPE oraz inne metody na przypisanie programu do rozszerzenia


 

Dzisiejsza porada została zainspirowana zadaniem jakie niedawno wpadło mi w ręce. Musiałem na sporej liczbie serwerów terminalowych przypisać rozszerzenia .doc, .docx, .docm,  do przeglądarki WordViewer 2003 oraz .xls, xlsx  .xlsm do ExcelViewer 2007. Można to zrobić na kilka sposobów, z których podam cztery, a najlepszy jak zawsze na końcu :-). Porada zadziała zarówno na serwerze jak i PC, więc może przydać się nie tylko administratorom systemów, ale też osobom obsługującym stacje robocze.

MENU KONTEKSTOWE

Po pierwsze można to zrobić ręcznie logując się koncie administratora na każdej maszynie, klikając prawym przyciskiem na pliku z danym rozszerzeniem i wybierając program domyślny (w ang. wersji „Choose Default Program”):

Podstawową wadą tego sposobu jest fakt, iż musielibyśmy tą czynność wykonać na każdej maszynie dla każdego rozszerzenia. Poleciłbym go w sytuacji, gdy mamy do czynienia z pojedynczym  komputerem, bo dla wielu maszyn jest to zwykła strata czasu.

DEFAULT PROGRAMS

Drugim, nieco lepszym, acz ciągle „ręcznym” sposobem jest wykorzystanie komponentu „Default Programs”(„Programy Domyślne”) dostępnego w Panelu Sterowania w systemach od Visty/2008 w górę.

Wybrawszy  „Associate a file type or protocol with a program” ( „skojarz typ pliku lub protokół z programem” ) otwieramy listę typów plików dla których możemy zmienić domyślny program:

Tak, jest to pewne ułatwienie, ale ze względu na brak wyboru kilku rozszerzeń na raz, nazwałbym je „umiarkowanie przydatnym” ;).

REJESTR (REGEDIT.EXE)

Trzecim sposobem jest „grzebanie” w Rejestrze. Rozszerzenia plików przechowywane są w:

HKEY_CURRENT_USER\Software\Classes\

Stworzenie nowego klucza od początku to zadanie karkołomne, gdyż różne rozszerzenia plików mają często kilka kluczy z wieloma wartościami. Teoretycznie, moglibyśmy więc z jakiejś wzorcowej maszyny wyeksportować wpis dla danego rozszerzenia (prawy przycisk -> export) i zaimportować go na innych maszynach.

Polecam prostą metodę importu z wiersza poleceń:

REG IMPORT NazwaPliku.reg

W połączeniu z psexec możemy natychmiastowo zaimportować dany klucz na dowolnej liczbie maszyn.

Dlaczego napisałem „Teoretycznie, moglibyśmy”? Otóż, Microsoft w obawie o to, iż będziecie propagować niepoprawne wpisy w rejestrze i napytacie sobie biedy, zwyczajnie odradza stosowanie tej metody. U mnie na szczęście dotychczas to działało:). Ostrzeżenie ma jednak sens, choćby z logicznego faktu, iż uninstaller danego programu nie będzie umiał usunąć wpisów, których nie tworzył program.

ASSOC i FTYPE

Przejdźmy jednak do sedna tego artykułu. Otóż, wszechmocny wiersz poleceń i wbudowane w Windows polecenia systemowe mogą pomóc również przy opisywanym zadaniu.

Polecenie assoc służy do przypisania rozszerzenia pliku do identyfikatora programu, czyli tzw. „ProgID”.  W Windowsach dopiero „ProgID” ma przypisaną ścieżkę do pliku.

Polecenie assoc wpisane w wierszu poleceń bez żadnych parametrów wyświetli Wam wszystkie rozszerzenia i przypisane do nich wartości „ProgID”. Z tej listy dowiemy się, że:

– rozszerzenie .doc ma ProgID „Word.Document.8”,
– rozszerzenie .docx ma ProgID „Word.Document.12”,
– rozszerzenie .docm ma ProgID „Word.DocumentMacroEnabled.12”,
– rozszerzenie .xls ma ProgID „Excel.Sheet.8”,
– rozszerzenie .xlsx ma ProgID „Excel.Sheet.12”,
– rozszerzenie .xlsm ma ProgID „Excel.SheetMacroEnabled.12”,

Przypisanie rozszerzenia do identyfikatora programu odbędzie się w prosty sposób (użyjmy .doc jako przykładu):

ASSOC .doc=Word.Document.8

Polecenie ftype przypisuje ścieżkę do program wykonywalnego do ProgID. Po wpisaniu „ftype” w wierszu poleceń, bez parametrów obejrzymy listę wszystkich powiązań.

Przypisanie programu do “progID”  na przykładzie plików .doc będzie wyglądało następująco:

FTYPE Word.Document.8=”C:\PROGRA~1\MICROS~1\OFFICE11\WORDVIEW.EXE” /n /dde

Cały mój batch wygląda tak (wyciąłem z niego tylko ostrzeżenie o tym, co zaraz się wykona):

ASSOC .doc=Word.Document.8
FTYPE Word.Document.8=”C:\PROGRA~1\MICROS~1\OFFICE11\WORDVIEW.EXE” /n /dde

ASSOC .docx=Word.Document.12
FTYPE Word.Document.12=”C:\PROGRA~1\MICROS~1\OFFICE11\WORDVIEW.EXE” /n /dde

ASSOC .docm=Word.DocumentMacroEnabled.12
FTYPE Word.DocumentMacroEnabled.12=”C:\PROGRA~1\MICROS~1\OFFICE11\WORDVIEW.EXE” /n /dde

ASSOC .xls=Excel.Sheet.8
FTYPE Excel.Sheet.8=”C:\Program Files\Microsoft Office\Office12\xlview.exe” „%%1″

ASSOC.xlsx=Excel.Sheet.12
FTYPE Excel.Sheet.12=”C:\Program Files\Microsoft Office\Office12\xlview.exe” „%%1″

ASSOC .xlsm=Excel.SheetMacroEnabled.12
FTYPE Excel.SheetMacroEnabled.12=”C:\Program Files\Microsoft Office\Office12\xlview.exe” „%%1”

Ścieżki do plików wykonywalnych wyglądają bardzo różnie. Niektóre programy wymagają parametru %1 (w batchu trzeba wpisać %%1, a bezpośrednio w CMD wpiszemy samo %1), który przekazuje nazwę otwieranego pliku. Inne bedą potrzebowały swoich własnych parametrów, jak chocby w powyższym przykładzie WordViewer 2003 wymaga „/n /dde”.

Aby uniknąć pomyłki, warto podejrzeć sobie ścieżki na jakimś wzorcowym komputerze, na którym przypisanie już działa poprawnie.

FTYPE i ASSOC mogą wydawać się zbędnym utrudnieniem, ale uwierzcie mi, to bardzo skuteczna metoda, a raz napisany skrypt, może przydać się wiele razy.

Jeśli pominąłem jakiś istotny element w temacie przypisywania programów do rozszerzeń piszcie śmiało. Zachęcam do częstego zaglądania na nasz Blog.


Podobne Tematy:

  • Darek

    Panie Łukaszu – mam pewien problem z otwieraniem dokumentów textowych – chodzi o to że na jednym systemie win 7 64 działają 2 wordy z offica 2003 i 2007 – jak to ew zrobić aby np. w Totall commanderze uruchomienie (przez najechanie i Enter) dokumentu z rozszerzeniem .doc otwierał worda 2003 a dokumenty docx otwierał word 2007. Uparcie otwiera się word 2007 pomimo że starałem się wg. poradnika przypisać ścieżki rozszerzeń do poszczególnych wordów

    • Trudno powiedzieć nie mając dostępu do takiego komputera, ale na pewno warto upewnić się, że na komputerze jest zainstalowany Office Compatibility Pack, który pozwoli Officowi 2003 otwierać nowsze formaty i potencjalnie rozwiąże tez problem powiązań.
      https://www.microsoft.com/en-us/download/details.aspx?id=3

      Zastanawiam się czemu na komputerze działają 2 wordy w różnych wersjach. Office 2007 powinien w pełni obsługiwać nowe pliki (.docx) oraz starsze wersje (.doc).

      • Darek

        Jakie to ludziska mają dziwne upodobania (2 wordy) – sprawa jest prozaiczna, 4 użytkowników jednego komputera i 2 osoby przyzwyczajone do worda 2003 które nie zamierzają korzystać z innego układu menu (bo ich drażni). A dlaczego jest nowszy word skoro wystarczy pakiet zgodności? bo czasami mimo tego pakietu starszy word gubi niektóre elementy i czasem źle interpretuje tabelki (znany problem wynikający z ograniczeń worda 2003) – problem bierze się stąd że nazwy obu programów są takie same i nie da się ich zmienić a po instalacji worda 2007 ustawienia anektują również przypisania do starszych wersji co naturalne.