2009-07-29 16 views
5

Obecnie mamy 4 instalatorów dla naszego oprogramowania klienckiego:Wymusza zastępowanie app.config podczas instalacji

  • ClientSetupTest
  • ClientSetupProduction
  • ClientUpdateTest
  • ClientUpdateProduction

Jedyne różnice pomiędzy ich instalacja zawiera pliki redystrybucyjne Crystal Reports, a aktualizacja działa nie. Testy i produkcja określają jedynie środowisko, w którym działają, a jedyną różnicą jest jeden wiersz w pliku Client.exe.config.

Głupi, wiem, dlatego zastąpiłem je jednym instalatorem po usunięciu Crystal Reports. Nowy instalator zapisuje wybrane środowisko do pliku setup.config, do którego odwołuje się atrybut pliku (see here).

Atrybut "plik" jest nowym plikiem konfiguracyjnym dla nowego instalatora. Problem, który napotykam, polega na tym, że jeśli zmodyfikujemy plik Client.exe.config na starej instalacji, a następnie uruchomimy nowy instalator, plik konfiguracyjny nigdy nie zostanie zaktualizowany za pomocą atrybutu "file".

Czy istnieje sposób zmuszenia go do aktualizacji pliku? RemovePreviousVersions nie działa dokładnie, ponieważ jest to inny instalator, chyba że coś nie rozumiem. Mój obecny pomysł, który prawdopodobnie zadziała, polega na dodaniu kodu w metodzie OnBeforeInstall w celu zmiany nazwy starego pliku Client.exe.config na plik kopii zapasowej, więc zawsze będzie on zapisywać nowy. Wydaje się jednak, że powinno być prostsze rozwiązanie w samym instalatorze. Jakieś pomysły?

EDIT: Zmiana nazwy stary plik konfiguracyjny do Client.exe.config.old przed wywołaniem base.OnBeforeInstall() nie działa. Zmienił nazwę pliku, ale nigdy nie napisał nowego.

Odpowiedz

4

Windows Installer won't update a modified file.

Nonversioned Pliki są Użytkownika Danych Jeśli data jest późniejsza modyfikacja niż data stworzyć dla pliku na komputerze, nie z powodu dostosowania użytkownik może zostać usunięty zainstalować plik. Jeśli Zmodyfikowane i Utwórz daty są takie same, zainstaluj plik. Jeśli data utworzenia jest późniejsza niż data modyfikacji, plik jest uznawany za niezmodyfikowany, a plik instaluje się .

Masz kilka opcji:

  • obejmują akcję niestandardową, który modyfikuje plik w miejscu. Może to być kod script lub .NET.

  • rób tak, jak mówisz - przenieś istniejący plik z drogi. Instalator nie zatrzyma się na nim. Ale musisz się upewnić, że dzieje się to w kolejności, którą sobie wyobrażasz. Możesz potrzebować Orca, aby ustalić kolejność.

  • zawierają niestandardową opcję ustawienia daty utworzenia na "dziś". To powinno być naprawdę proste dzięki skryptowej akcji niestandardowej, przy użyciu Scripting.FileSystemObject. Następnie instalator systemu Windows zastąpi go.

+0

Dzięki. Dam ci opcję niestandardową. Nadal będę miał problem z nieumiejętnością zmiany ustawień, ale jeśli został zmodyfikowany, mogę go wykryć i skopiować starą konfigurację. –