Как сказать MSI не перезаписывать существующий файл в Setup & Deployment Project в VS2005?


У меня есть проект установки и развертывания в VS2005. Один из файлов, которые я устанавливаю, - это файл данных SQLite.

Я собираюсь выпустить новую версию программного обеспечения, но я обнаружил, что если я запускаю обновление на существующей установке, оно перезаписывает файл данных.

У меня есть обновленный файл данных в проекте установки, так что он новее, чем уже установлен, но я не хочу его перезаписывать.

Я пытался установить постоянное свойство для этого файла в True, но нет выгода.

Есть предложения?

3 2

3 ответа:

Хорошо, вот обходной путь, который я использовал:

  • в моем проекте установки я переименовал свой пустой файл базы данных из базы данных.БД в базу данных-пусто.дБ.
  • в моем приложении я проверяю, есть ли база данных.БД отсутствует, а копирование базы данных-пустое.БД в базу данных.БД, если это так.
  • затем просто загрузите существующую базу данных.db

Таким образом, я могу обеспечить локальную копию файла данных (базы данных.db) не заменяется более новыми версиями программного обеспечения.

В MSI лучшим способом было бы сделать запись в таблицеобновления , определив, является ли это установкой обновления, и установив свойство, если это так. Затем поместите файл данных в компонент и поставьте условие для этого компонента. Кроме того, сделайте запись в таблице AppSearch, проверяя наличие файла (через таблицу DrLocator).

Я не знаю, поддерживает ли проект установки и развертывания что-либо из этого. Так как запасной вариант, установите файл с другим именем,а затем создайте пользовательское действие, которое копирует файл условно.

Потому что VS2005 setup при обновлении программы сначала удаляет исходный установленный экземпляр а затем установить новый, так что для этого файл будет удаляться каждый раз.

Чтобы избежать замены или перезаписи файла, я предлагаю следующее: 1-отметьте файл как только для чтения в проекте установки. 2-отметьте файл как постоянный в проекте установки.

Теперь после обновления файла он не будет перезаписан, но ваше приложение не может работать с этим файлом, потому что он доступен только для чтения, поэтому при запуске приложения проверьте, доступен ли файл данных только для чтения.