2013-06-20 13 views
6

Przeprowadzam główne uaktualnienie i odinstalowanie istniejącego produktu przed zainstalowaniem nowej wersji. Ale chcę zachować istniejący plik konfiguracyjny.Plik Wix CopyFile przed deinstalacją i przywróceniem po odinstalowaniu

Ponieważ wcześniejsza wersja nie miała ustawienia Permanent = "yes", usuwa plik konfiguracyjny podczas deinstalacji.

I jak mogę zrobić coś takiego, zrób kopię "app.config" jako "app.config.bak" przed odinstalowaniem. Po odinstalowaniu, przywróć go z "app.config.bak" do "app.config".

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="BackupConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="BackupConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config.bak" /> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="RestoreConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="RestoreConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config.bak" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config" /> 
    </Component> 
</DirectoryRef> 


<InstallExecuteSequence> 
    <Custom Action="BackupConfigFile" After="InstallInitialize" /> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="RestoreConfigFile" After="InstallInitialize" /> 
</InstallExecuteSequence> 

Dzięki

Odpowiedz

3

Wszystko co musisz zrobić, to zmienić <Custom Action="RestoreConfigFile" After="InstallInitialize" /> do <Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

Jest to po prostu kwestia rozrządu, który masz. Mówisz, że wszystkie trzy akcje mają się odbyć po InstallInitialize, więc jest bardzo możliwe, że nie pozostają one w kolejności, w jakiej zostały napisane. . Zawsze jest to lepszy pomysł, aby wyraźnie wymienić jakiej kolejności chcesz je na lepsze, pełne fix, byłoby:

<Custom Action="BackupConfigFile" After="InstallInitialize" /> 
<RemoveExistingProducts After="BackupConfigFile" /> 
<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " /> 

EDIT: (Na podstawie wypowiedzi) Aby utworzyć niestandardową akcję w MSI będziesz trzeba zrobić element CustomAction. Potrzebny jest również kod do tworzenia niestandardowej akcji. Jednak jeśli próbujesz tylko skopiować plik, proponuję użyć elementu CopyFile. Jest o wiele łatwiejsze i czystsze niż przechodzenie przez wszystkie niestandardowe czynności, aby zrobić to, o czym myślę, że wybierasz.

+0

Mówi Błąd Wartość atrybutu Custom/@ After "RemoveExistingProducts" nie jest prawnym identyfikatorem. Identyfikatory mogą zawierać znaki ASCII A-Z, a-z, cyfry, podkreślenia (_) lub kropki (.). Każdy identyfikator musi rozpoczynać się od litery lub podkreślenia. –

+0

OK, było to spowodowane przestrzenią, ale teraz jest napisane: Nierozwiązane odniesienie do symbolu "CustomAction: BackupConfigFile" w sekcji "Produkt: *". –

+1

Utworzono niestandardową akcję o nazwie BackupConfigFile? To nie jest standardowa niestandardowa czynność, którą zapewni Ci Instalator Windows. – Adkins

Powiązane problemy