Skrypt do kojarzenia rozszerzenia z programem

Mój klient zastępuje MS Office OpenOffice na niektórych stacjach roboczych. Mój program eksportuje plik do Excela za pomocą .rozszerzenie xml (za pomocą otwartego formatu) i otwiera je za pomocą bieżącego powiązanego programu (za pomocą ShellExecute)

Problem polega na tym, że OpenOffice nie rejestrujezwiązane z nim rozszerzenie xml.

Ręczne skojarzenie działa dobrze, ale chcę zrobić .reg lub coś, aby łatwo zmienić ustawienie.

Szukam w rejestrze w komputerze z zmiany już dokonane, ale

"HKEY_CLASSES_ROOT\.xml" 

Klucz nie ma nic, co odwołuje się do OpenOffice.

Gdzie jest przechowywane skojarzenie? Jak zrobić skrypt do pracy?

Author: Eduardo Molteni, 2008-10-17

4 answers

Prawdziwe skojarzenie jest przechowywane w kluczu, na który wskazuje "HKEY_CLASSES_ROOT\.xml".

Na moim komputerze domyślna wartość tego klucza mówi "xmlfile", najprawdopodobniej jest to samo dla Twojego.

Więc chodźmy do "HKEY_CLASSES_ROOT\xmlfile". Tam możesz zobaczyć (i zmienić) jakie polecenie będzie użyte do uruchomienia tego typu pliku:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

System Windows używa tego rodzaju przekierowania, aby mapować wiele rozszerzeń plików do tego samego typu pliku, a tym samym do tej samej aplikacji.

Pod "HKEY_CLASSES_ROOT\xmlfile\shell" znajdują się wiele klawiszy podrzędnych, które przypominają "czasowniki" tego, co można zrobić z plikiem. Ponownie, domyślna wartość klucza "shell" decyduje o tym, który z tych czasowników zostanie użyty, jeśli dwukrotnie klikniesz plik. W moim przypadku jest to "open".

Wniosek:

Z tej wiedzy, najprostszym sposobem, aby Asocjacja scriptable jest użycie regedit do eksportu .plik reg zawierający tę zmianę i zastosuj ją do komputera docelowego za pomocą podwójnego kliknięcia or:

regedit /s new_xml_association.reg

Lub (jeśli jesteś na XP lub wyższy i wiedzieć, co robisz) Nadpisz bieżącą wartość:

reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"

W każdym razie, zaleca się głębsze spojrzenie na reg add/? polecenie. Pierwsze rozwiązanie jest bezpieczniejsze.

 17
Author: Tomalak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-17 17:48:42

Rozważ polecenie dos assoc:

C: > assoc/? Wyświetla lub modyfikuje rozszerzenie pliku Asocjacje

ASSOC [.ext [=[fileType]]]

.ext Określa plik rozszerzenie do kojarzenia typu pliku z fileType Określa plik Typ, aby skojarzyć z plikiem rozszerzenie

Wpisz ASSOC bez parametrów do wyświetla bieżące skojarzenia plików. Jeśli ASSOC jest wywoływany tylko z plikiem rozszerzenie, wyświetla bieżący Asocjacja plików dla tego pliku przedłużenie. Nic nie wskazuje na Typ pliku i polecenie usunie Stowarzyszenie na rzecz akt przedłużenie.

 1
Author: kenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-02 12:24:28

Używanie skojarzeń plików w tym przypadku wydaje się niewłaściwą rzeczą. chcesz, aby Twoja aplikacja otworzyła plik w OpenOffice, ale co jeśli twój użytkownik chce pozostawić skojarzenie plików XML nietknięte? Co jeśli coś innego w ich systemie również opiera się na tym związku? W takim razie łamiesz ich system. Jeśli jesteś informatykiem, to być może jest to OK( nadal wątpliwa praktyka programowania), ale jeśli nie, to jest to zła rzecz do zrobienia.

Użyj Implementacja OpenOffice COM do otwarcia pliku.

Dobry prosty przykład tutaj: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

 1
Author: user373533,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 17:32:39

Właśnie natknąłem się na to, szukając tej samej odpowiedzi. Znalazłem lepsze rozwiązanie przy użyciu Windows FindExecutable API, które mogą być używane z C# za pomocą PInvoke.

Http://www.pinvoke.net/default.aspx/shell32.findexecutable

 -1
Author: TheCodeKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-15 15:39:51