Как сказать MSI не перезаписывать существующий файл в Setup & Deployment Project в VS2005? - PullRequest
2 голосов
/ 26 августа 2009

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

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

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

Я пытаюсь установить для свойства Permanent этого файла значение True, но безрезультатно.

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

Ответы [ 3 ]

1 голос
/ 28 августа 2009

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

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

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

0 голосов
/ 26 августа 2009

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

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

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

0 голосов
/ 26 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...