Co to jest atrybut „KeyPath” wix?

125

Co to jest atrybut Wix „ KeyPath ”? W szczególności, jak ma to zastosowanie do następujących:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>
Seth
źródło
112
OMG, dokumentacja Wix jest całkowicie bezużyteczna. Dokument wix mówi, że dla atrybutu KeyPath, jeśli ustawisz go na „Tak”, plik jest traktowany jako ścieżka klucza dla komponentu. Bardzo pomocne!
Cheeso
5
@RobMensching - doceń swojego ducha i chęć wniesienia wkładu w społeczność. Mówienie mi, jak NIE narzekać, nie jest tak dobre, jak mówienie mi (i innym), jak narzekać. Gdybym wiedział, gdzie można zgłosić błąd, 2 lata temu, zrobiłbym to. Ponadto, jak widać po upvotes, podobno inni ludzie czują się podobnie. Może czas na tego typu wiadomość: „Pomóż ulepszyć WiX! Prosimy o zgłaszanie odpowiednich błędów klikając TUTAJ ”.
Cheeso
21
Zrobi się, @Cheeso! Proszę zgłaszać błędy tutaj: wixtoolset.org/bugs
Rob
8
@Cheeso Kluczową koncepcją, którą należy zrozumieć, jest to, że projekt instalacji WiX tworzy pakiet Instalatora Windows. Dokumenty WiX nie (i przeważnie nie powinny) powielać dokumentów Instalatora Windows. Chociaż często można użyć konstrukcji WiX bez zrozumienia obsługiwanych przez nią tabel Instalatora Windows, w razie jakichkolwiek pytań należy sprawdzić dokumentację w witrynie MSDN. W przypadku komponentów zacznij tutaj .
Tom Blodget,
30
@TomBlodget: Uważam, że WiX POWINIEN duplikować dokumenty Instalatora Windows. Dla większości użytkowników podział WiX / Windows Installer powoduje jedynie zamieszanie, a im bardziej użytkownik końcowy może to ukryć, tym łatwiejsze jest użycie całego narzędzia.
Scott Stafford

Odpowiedzi:

122

Jak wyjaśnił Rob Mensching :

KeyPath dla składnika to pojedynczy zasób, którego Instalator Windows używa do określenia, czy składnik „istnieje” na komputerze.

Oznacza to, że gdy Instalator Windows zdecyduje, czy zainstalować komponent, najpierw sprawdzi, czy zasób keypath jest już obecny. Jeśli tak, żaden z zasobów składnika nie jest zainstalowany.

Obecność zasobu keypath określa również, czy składnik został uszkodzony lub zaginął podczas „naprawy” pliku MSI.

Gdy zasób keypath jest wersjonowanym plikiem, Instalator Windows uzna go za istniejący tylko wtedy, gdy znajdzie plik o równej lub wyższej wersji.

W twoim konkretnym przykładzie masz składnik, który usuwa folder podczas dezinstalacji. Ten składnik zostanie zainstalowany tylko wtedy, gdy podany klucz rejestru jeszcze nie istnieje. Dodanie klucza rejestru, który będzie używany jako ścieżka klucza, jest powszechną sztuczką, gdy potrzebujesz ścieżki klucza dla składnika, który instaluje zasoby, których nie można używać jako ścieżki klucza, na przykład skrótu .

Wim Coenen
źródło
4
Więc jaki jest sens w jawnym nadaniu jedynemu plikowi w składniku atrybutu keypath = "no"?
Christopher B. Adkins,
4
@Adkins: to powstrzymałoby domyślne zachowanie wix, aby wziąć ten plik jako ścieżkę klucza. W rezultacie żadna ścieżka klucza nie jest zapisywana w bazie danych instalatora dla tego komponentu. Podczas instalacji instalator systemu Windows użyje wówczas folderu docelowego komponentu jako ścieżki klucza. Innym sposobem uzyskania tego zachowania jest ustawienie „keypath = yes” w samym elemencie komponentu. W każdym razie nie wydaje mi się to dobrym pomysłem.
Wim Coenen,