Избегайте перезаписи существующих файлов при установке более новой версии - PullRequest
2 голосов
/ 19 апреля 2010

У меня есть проект приложения Windows VS2008 (WinProject), который развертывается проектом установки (InstallationProject), у которого свойство inturn имеет свойство RemovePreviousVersions, установленное в True.

В моем приложении для каждой конфигурации, выполненной пользователем, winapp записывает конфигурации в файл xml (хранящийся в папке C: \ Application Name \ Files \), который также содержит путь, в котором была сохранена конфигурация.

Теперь, когда я создаю новые версии установщика, эта папка и файлы перезаписываются, поскольку флаг AlwaysCreate установлен на True .

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

Пример: содержимое файла

  <PriceFiles>
    <Name>arr</Name>
    <Path>C:\NewTool\arr.xml</Path>
    <UserDefined>true</UserDefined>
  </PriceFiles>
  <ReferenceProjects>
    <Name>studio</Name>
    <Path>C:\NewTool\ReferenceProjects\6cd3a9e9-ad65-475e-953b-128915a496cd.xml</Path>
    <UserDefined>true</UserDefined>
    <CreatedBy>Admin</CreatedBy>
  </ReferenceProjects>

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 10 апреля 2013

Property

Обычно всякий раз, когда мы добавляем внешние файлы в папку приложения в Setup and Deployment, щелкните их properites и выберите параметр с именем Permanent: True и Exclude: False. Это не будет перезаписывать существующие файлы (в пути установки).

Кроме того, если вы хотите сделать Myproduct.exe.config постоянным, вы можете добавить этот файл в папку приложения в Setup and Deployment и настроить их свойства, как я уже говорил. Это предотвратит перезапись Myproduct.exe.config. Я попробовал это, работал для меня. Но когда я строил свой проект, я получал предупреждение как Two or more objects have the same target location ('[targetdir]\Myproduct.exe.config').

0 голосов
/ 19 апреля 2010

Есть ли причина не использовать встроенные пользовательские параметры конфигурации ?

С точки зрения предотвращения перезаписи этих файлов, я не думаю, что есть способ сделать это с настройкой MSI по умолчанию.

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

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

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

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

0 голосов
/ 20 апреля 2010

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

На самом деле, работа, которую мне нужно выполнить, это то, что вы уже догадались ... т.е. «создать файл конфигурации с содержимым по умолчанию, если файл не существует на компьютере» "объединить настройки конфигурации, если файл уже находится на компьютере"

Должен ли я использовать пользовательский установщик для этой проверки ??

С уважением Vatsa

0 голосов
/ 19 апреля 2010

Возможно, вам следует записать свои файлы конфигурации в папку ApplicationData.Вы можете получить путь к нему:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
...