Как не копировать файл при последующих установках?

В Product.wxs я установил Schedule = "afterInstallInitialize" в MajorUpgrade, чтобы в случае сбоя установки выполнялся откат к предыдущей версии.

Наша служба Windows использует app.config, который установщик скопировал на установленный компьютер. Мы делаем это, добавляя следующую строку в Product.wxs:

<Component Id="Config" Win64="yes">
        <File Source="$(var.WixWindowsService2012.TargetDir)WixWindowsService2012.exe.config"
              Name="WixWindowsService2012.exe.config"
              Vital="yes" KeyPath="yes" />
</Component>

Мы хотим скопировать этот файл app.config только при первой установке и НЕ хотим копировать его при последующих установках.

Когда я закомментировал вышеупомянутый элемент Component в Product.wxs, установка завершилась неудачно, потому что во время установки он удаляет app.config в установленной папке, а поскольку служба Windows требует его запуска, установка не выполняется.

Как я могу заставить установку не копировать app.config в установленную папку, если app.config там уже существует?

Спасибо.


person faujong    schedule 25.02.2014    source источник
comment
Возможный дубликат Копировать, если его нет в WiX.   -  person Frédéric Hamidi    schedule 25.02.2014
comment
Следуя stackoverflow.com/questions/1912037/copy -if-not-exist-in-wix, я подумал, что если я установлю элемент File, как показано ниже, он НЕ будет копировать файл, если файл уже существует в установленной папке: ‹File Source = $ ( var.WixWindowsService2012.TargetDir) WixWindowsService2012.exe.config / ›Но указанная выше команда по-прежнему переопределяет файл.   -  person faujong    schedule 26.02.2014
comment
Был ли файл изменен с момента предыдущей установки?   -  person Frédéric Hamidi    schedule 26.02.2014
comment
Да, предположим, что файл в установленной папке - 25.02.14, 15:41, а файл в установщике - 14.02.15, 11:30. Когда я переустанавливаю, файл в установленной папке заменяется файлом в установщике (более раннее время).   -  person faujong    schedule 26.02.2014
comment
Вы пробовали NeverOverwrite="yes" в component?   -  person IlirB    schedule 26.02.2014
comment
Я добавил NeverOverwrite = yes в компонент, и когда я переустанавливаю, установщик сначала удалил app.config в установленной папке (из предыдущей установки), и эта новая установка не копирует файл, поэтому установка не выполняется, потому что служба Windows не может запуститься без файла app.config.   -  person faujong    schedule 26.02.2014
comment
@faujong, деинсталлятор вашей установки не должен удалять файл, если даты его создания и изменения различаются. Выполняется ли удаление с помощью специального действия?   -  person Frédéric Hamidi    schedule 26.02.2014
comment
У меня нет специального действия для удаления какого-либо файла. Это находится в Product.wxs: ‹Product Id = * Name = WixWindowsService2012..UpgradeCode = bla› ‹Package InstallerVersion = 200 ../› ‹Upgrade Id = bla› ‹UpgradeVersion OnlyDetect = no Property = PREVIOUSFOUND Minimum = 1.0.0.0 IncludeMinimum = да Максимум = 99.0.0.0 IncludeMaximum = no / ›‹/Upgrade›‹ Расписание MajorUpgrade = afterInstallInitialize / ›   -  person faujong    schedule 26.02.2014
comment
Продолжение Product.wxs: ‹Идентификатор компонента = Компонент продукта Win64 = да› ‹Идентификатор файла = WixWindowsService2012.exe Имя = WixWindowsService2012.exe Источник = $ (var.WixWindowsService2012.TargetPath) Vital = yes KeyPath = yes DiskId = 1 /› ‹ ServiceInstall .. ›‹/ServiceInstall›‹ ServiceControl Id = StartService Start = install Stop = both Remove = uninstall Name = WixWindowsService2012 Wait = yes / ›‹/Component›   -  person faujong    schedule 26.02.2014


Ответы (1)


Проблема в том, что RemoveExistingProducts обновления удаляет файл, а затем входящее обновление устанавливает новый, как описано в списке рассылки WiX. RemoveExistingProducts должен быть непосредственно перед InstallFinalize и после InstallExecute в конце.

person PhilDW    schedule 26.02.2014
comment
Когда Schedule = afterInstallExecute или afterInstallExecuteAgain, установщик ПРАВИЛЬНО НЕ переопределяет файл конфигурации. Но когда установка не удалась, мне было выдано приглашение. Следующие приложения должны быть закрыты перед продолжением установки: WixWindowsService2012. И он просит меня выбрать -Автоматически закрыть приложения и попытаться перезапустить их после завершения установки. -Не закрывайте приложения. (Может потребоваться перезагрузка). - person faujong; 27.02.2014
comment
Продолжение моего предыдущего комментария: когда я выбираю «Автоматически закрывать приложения и пытаюсь перезапустить их после завершения установки», он останавливает работающую службу Windows, но никогда не предлагает мне отменить установку. Так что никогда не откатился к предыдущей версии установки. Единственный способ отменить установку - нажать кнопку «Отмена» в появившемся выше запросе. Это задумано? - person faujong; 27.02.2014