Zmieniłem skojarzenie, które ma być używane podczas uruchamiania .py
pliku za pomocą Eksploratora Windows:
- Narzędzia -> Foldery -> Typy plików.
- Następnie przejdź do
.py
. - Zmień powiązanie na Wordpad.
Teraz, gdy wpisuję nazwę pliku py w wierszu poleceń, Wordpad otwiera go.
Ale assoc
i ftype
w wierszu poleceń jeszcze powrócić, co następuje:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
Jak to działa stowarzyszenie, ale assoc
i ftype
nie są tego świadomi?
Ponownie uruchomiłem monit.
Więcej informacji z mojego rejestru:
HKEY_CLASSES_ROOT\.py
= Python.File
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
= wordpad.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids\Python.File
=
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py\(Standard)
= Python.File
Więcej rejestrów:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
Przypuszczam, że właśnie w tym się pojawia ftype Python.File
. Ale nie wydaje się, aby się przyzwyczaić.
(Robię to w celu przetestowania, więc w końcu mogę łatwo wybrać moją domyślną wersję Pythona).
windows-xp
file-association
Gauthier
źródło
źródło
Odpowiedzi:
W zależności od tego, jak wywołasz plik, zależy to od użytego czasownika. Użyty czasownik określa, co Windows z nim zrobi. Standardowe czasowniki to Otwórz, Edytuj, Drukuj, Odtwórz i Podgląd. Możliwe jest jednak tworzenie własnych czasowników . Najczęściej dodawanym czasownikiem jest rodzina Open With (w tym OpenWithProgID), która dodaje to małe podmenu kontekstowe pod „Open With”, aby dać ci możliwe alternatywy. Jeśli na przykład zainstalujesz Paint.NET, a następnie klikniesz prawym przyciskiem myszy plik .jpg, zobaczysz, że pozycja Otwórz za pomocą rozwija się do podmenu zawierającego listę Paint.NET, Paint i wszelkie inne programy, które Microsoft nazwał przeglądarką zdjęć dla twojej wersji systemu Windows.
Ponadto bardzo ważne jest to, co powiedział Unsigned Code Labs. Podczas debugowania klas musisz spojrzeć na
HKLM\Software\Classes\
iHKCU\Software\Classes
.HKCR
jest bardzo przydatny do wysyłania zapytań do systemu, ale nie jest tak dobry, aby dowiedzieć się, dlaczego źle się zachowuje.Zrobiłem trochę testów na moim systemie Windows 7
procmon.exe
, a poleceniaassoc
iftype
wydają się próbować pisać bezpośrednio doHKCR
, a system najwyraźniej interpretuje to jako pisanie naHKLM
. Moje obecne konto jest członkiem grupy administracyjnej, ale UAC jest włączony. Odmówiono dostępu, gdy próbowałemassoc .mytest=MyTest.File
.Dziwne, że jeśli utworzę powiązanie, klikając prawym przyciskiem myszy plik o nazwie
test.mytest
i skojarząc go z Notatnikiem, to powiązanieassoc
nie będzieftype
widoczne. Stowarzyszenie jest zdecydowanie tamHKCU
iHKCR
. Jednak nie próbowałem restartu.źródło
nie wiem jak możesz dopasować rejestr do tego, co pojawia się w ftype i assoc. Dla mnie i, jak widzę, również polecenie ftype i assoc są bezużyteczne. Aby zmienić domyślny program dla danego rozszerzenia w sposób programowy (w porównaniu ze standardowym i prostszym sposobem przy użyciu Eksploratora), zmodyfikuj ten klucz rejestru
Na przykład, jeśli chcę otworzyć moje pliki mp3 za pomocą mplayera, włączam
wartość „mplayerc.mp3”
Na czym polega komplikacja: najpierw musisz znać poprawne identyfikatory ProgID (użyj ftype), a po drugie potrzebujesz dostępu do zapisu w tym ulu. System Windows automatycznie umieszcza odmowę ACL dla klucza UserChoice, więc musisz znaleźć sposób na usunięcie tej reguły odmowy, aby uzyskać dostęp do zapisu. Korzystam z programu subinacl, który można pobrać stąd http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en w celu modyfikacji uprawnień. Możesz także skorzystać z zewnętrznego programu SetACL. Polecam pierwszy, ponieważ składnia jest o wiele prostsza.
źródło
Eksplorator (powłoka systemu Windows) zawsze daje pierwszeństwo aplikacji określonej w kluczu dostawcy określonym w domyślnej wartości rozszerzenia. (W twoim przypadku
.py
jest to rozszerzenie,Python.File
to klucz dostawcy).ftype
iassoc
mogą odczytać ich wartości z innych dziedzin, nie wiem na pewno. Tak właśnie robi Explorer.EDYCJA: Ta strona może Cię zainteresować: MSDN - Typy plików
Szczególnie to:
Być może właśnie tutaj zderzają się różne części systemu Windows, jeśli w HKEY_LOCAL_MACHINE istnieje „domyślne” skojarzenie, które jest zastępowane przez zdefiniowane na koncie (które byłoby wówczas przechowywane w HKEY_CURRENT_USER).
źródło
Microsoft zmienił sposób, w jaki działa to od wersji Windows 8. Edycja rejestru, aby to zmienić, nie jest już możliwa. Aby zacytować Microsoft :
Sposób, w jaki Microsoft oczekuje, że zmienisz to teraz, to plik xml, który jest implementowany za pomocą zasad grupy. Instrukcje tutaj .
Na szczęście Christoph Kolbicz zmodyfikował algorytm mieszania i stworzył narzędzie o nazwie SetUserFTA, aby ustawić skojarzenie typu pliku. Niestety jest to zamknięte źródło.
źródło
Pomyłka dotyczy tego, co jest używane do otwarcia pliku, a tym, co służy do uruchomienia pliku. Klucz rejestru
mówi systemowi Windows, jak otworzyć plik. Dwukrotne kliknięcie pliku otworzy plik w tej aplikacji.
Ponieważ plik nie jest plikiem wykonywalnym, wiersz polecenia zakłada, że chcesz otworzyć plik za pomocą domyślnej aplikacji, tak jakbyś dwukrotnie go kliknął.
Zmiana powiązania z powrotem na C: \ Program \ Python27 \ python.exe lub edycja klucza rejestru, aby wskazywał na python, powinien powrócić do poprzedniego stanu, w którym Windows zakłada, że chcesz otworzyć plik za pomocą domyślnego programu, którym jest python.exe, który następnie uruchamia program.
źródło
.py\Application
służy do otwierania plików py. Nie rozumiem, w jakich przypadkachPython.File
używana jest wartość .PATHEXT
zmienna). Pamiętam jednak, jak czytałem w przeszłości, że skojarzenia wykonane z Eksploratora zawsze nadpisują te zClasses
klucza rejestru.Najważniejszą wskazówką dotyczącą celu i lokalizacji jest „duży typ”, tzn. Nazwy odpowiednich uli: HKLM i HKCU
Powiązania plików są ustawione w obu ulach i mają dwa różne cele:
Jak sama nazwa wskazuje, wpisy rejestru HKCU ustawiają powiązania plików dla BIEŻĄCEGO UŻYTKOWNIKA i zastępują odpowiednie ustawienia typu pliku w HKLM.
HKLM ustawia skojarzenia plików dla LOCAL MACHINE, tj. Dla WSZYSTKICH UŻYTKOWNIKÓW maszyny (chyba że zostaną zastąpione wpisami HKCU). (Dla Win98 HKCR był tylko skrótem dla HKLM \ Software \ Classes. Nie były to oddzielne lub różne ule. Jednak zmieniło się to dla Win XP i nie jest już prawdą. HKCR jest teraz wirtualnym ulem, który jest wynikiem połączenia klucze HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ oraz HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts z pierwszeństwem informacji HKCU.)
Ten dwustopniowy system ułatwia nie tylko schematy asocjacji plików jeden do jednego, ale także wiele do jednego i jeden do wielu. Na przykład typy plików .htm, .html i .shtml można ustawić na ProgID = plik html, co z kolei może definiować pojedynczą przeglądarkę. OTOH, wpisy mogą zawierać podklucz OpenWithList lub OpenWithProgID z wieloma wpisami, aby otworzyć plik z listy wielu przeglądarek, edytorów lub innych aplikacji.
Zarówno HKLM \ Software \ Classes \, jak i HKCU \ Software \ Classes działają w ten sam sposób (jeden ma pierwszeństwo przed drugim). W najprostszej postaci istnieje klucz rejestru dla rozszerzenia pliku (np. HKCR.txt), którego wartością domyślną jest odpowiedni ProgID (np. Plik txt). Oprócz lub zamiast wartości domyślnej mogą być wymienione dodatkowe nazwy ProgID dla podklucza „OpenWithProgID” (np. Txtfile i htmlfile) i / lub dodatkowe nazwy aplikacji pojawiające się jako podklucze w „OpenWithList” (np. Notepad ++ .exe, Opera.exe, Firefox.exe).
Każdy ProgID jest zdefiniowany w innym kluczu w HKCR (np. HKCR \ txtfile). Ten klucz zawiera podklucze, które informują system Windows, której ikony użyć i jak otworzyć, wydrukować, wydrukować itp. Skojarzony plik (np. G, HKCR \ txtfile \ shell \ open \ polecenie). Podobnie każda nazwa aplikacji jest zdefiniowana jako podklucz w HKCR \ Applications (np. HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).
Oprócz klucza HKCU \ Software \ Classes skojarzenia plików kont użytkowników znajdują się w kluczu HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Te wpisy nie dotyczą tylko Eksploratora Windows, jak sugerowano, ale stanowią dodatkowe źródło nadpisań powiązań plików kont użytkowników. Wpisy tworzone są za pomocą narzędzi do łączenia plików w eksploratorze (Explorer \ Tools \ Folder Options \ Typy plików) i zawierają podklucz OpenWithList i / lub OpenwithProgID dla każdego wymienionego rozszerzenia pliku.
Aby ustalić powiązanie pliku, system Windows najpierw sprawdza wpisy HKCU w poszukiwaniu odpowiedniego rozszerzenia pliku. Tylko jeśli nie zostanie znaleziony, wpisy HKLM wchodzą do gry. (Uwaga: nie testowałem, który ma pierwszeństwo - HKCU \ Software \ Classes lub HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts, ale podejrzewam, że będzie to klucz FileExts). Podobnie, jeśli w HKCU nie znaleziono odnośnika ProgID lub nazwy aplikacji, wyszukiwane są wpisy HKLM. (Zauważ, że wpisy \ Aplikacje \ są po prostu dowolną nazwą - mimo że zazwyczaj są identyczne z rzeczywistą nazwą pliku exe na dysku).
Aby zdefiniować powiązanie pliku dla określonego konta użytkownika, utwórz wpisy w gałęzi HKCU. Aby zdefiniować powiązanie dla wszystkich użytkowników, utwórz wpisy w gałęzi HKLM (HKCR) i usuń wszystkie odwołania w gałęzi HKCU do tego typu pliku. Oczywiście potrzebujesz odpowiednich praw dostępu do kluczy rejestru.
Nie używam narzędzi assoc i ftype, ponieważ wolę używać RegEdit w trybie interaktywnym lub wsadowym, ale z innych komentarzy wynika, że działają one tylko w gałęzi HKLM i są bezużyteczne do czyszczenia / ustawiania kluczy HKCU. Poświęć trochę czasu i przejrzyj wyżej wymienione klucze za pomocą RegEdit, aby zobaczyć więcej przykładów.
źródło