2009-10-29 13 views
54

pliki Wix zawsze wydają się zawierać wiersz:W plikach WiX, do czego odwołuje się Name = "SourceDir"?

<Directory Id="TARGETDIR" Name="SourceDir"> 

co jest "SourceDir"? Do czego jest to używane? To nie jest prawdziwa nazwa katalogu. Czy to jakaś magiczna wartość?

+1

TARGETDIR to miejsce, w którym chcesz zainstalować, SourceDir jest ścieżką do miejsca, w którym znajduje się zainstalowany pakiet instalacyjny: http://msdn.microsoft.com/en-us/library/aa372452 (VS.85). aspx –

Odpowiedz

79

Od: http://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to

szczerze, to jest coś, co powinniśmy mieć ukryte od dewelopera, ale nie. Przepraszam. Prawda jest taka, że ​​Instalator Windows spodziewa się, że drzewo katalogu będzie zawsze zakorzenione w wierszu katalogu, w którym klucz podstawowy (Directory/@ Id) to "TARGETDIR", a kolumna DefaultDir (Directory/@ Name) to "SourceDir" .

Podczas instalacji TARGETDIR domyślnie ustawi się na największy napęd w maszynie. SourceDir zostanie ustawione na lokalizację, w której wykonywany jest MSI. Teraz SourceDir jest trudny po wstępnej instalacji, ponieważ nie zostanie ustawiony, dopóki nie zostanie wywołana akcja ResolveSource. Nie chcesz jednak wywoływać jawnie akcji ResolveSource, ponieważ prawdopodobnie poprosi Cię o dostarczenie oryginalnego nośnika źródłowego (czyli: włóż dysk CD, proszę).

To, co powinniśmy zrobić w zestawie narzędzi WiX, to usunąć potrzebę określenia pary TARGETDIR/SourceDir i powiedzieć "Dowolny element katalogu, który nie ma rodzica, automatycznie zostanie nadrzędny dla TARGETDIR, ponieważ tak mówi SDK MSI. " Zamiast tego musisz zrobić to sam ... a niektórzy deweloperzy zastanawiają się, co to wszystko oznacza.

20

Z dokumentacji wix.chm, wątek „Jak Dodaj plik do Instalatora”:

elementu z TARGETDIR id jest wymaganych przez Instalatora Windows i jest korzeniem wszystkich katalog struktury do instalacji

według dokumentacji MSDN TARGETDIR jest

katalog docelowy korzeń dla instalacji

Również zgodnie z MSDN, SourceDir jest

katalog główny, który zawiera plik cab źródłowego lub plik źródłowy drzewo pakietu instalacyjnego

Tak więc właściwość SourceDir wskazuje na prawdziwy katalog: ten, w którym znajduje się plik MSI. Możesz to zobaczyć w dzienniku instalatora podczas instalacji z msiexec /lvx* installer.log installer.msi.

Jednak z jakiegoś powodu SourceDir jest całkowicie ignorowany podczas rozwiązywania TARGETDIR. TARGETDIR musi być ustawiony jawnie (np. W wierszu poleceń) lub w przeciwnym razie zostanie rozstrzygnięty jako ROOTDRIVE. Jeśli ROOTDRIVE nie jest jawnie ustawione, jest to katalog główny dysku z największą ilością wolnego miejsca.

Szybki test pokazuje, że instalacja komponentu do TARGETDIR rzeczywiście powoduje umieszczenie plików w katalogu głównym dysku D: \, zamiast folderu, w którym znajduje się MSI.

+2

Dzięki za informacje. Wciąż jestem jednak zakłopotany. Rozumiem, że atrybut Name powinien być nazwą prawdziwego katalogu, którego "SourceDir" nie jest. Jeśli go nie masz, kompilator narzeka z błędem wzdłuż linii "musisz ustawić Name na SourceDir". –

+11

Ah! tajemnice Wix! Odkrywanie wszystkich niespodzianek, niespójności i sekretnych uścisków dłoni to prawdziwa przygoda. – Cheeso

Powiązane problemy