Проблема с обновлением WiX! - PullRequest
1 голос
/ 05 мая 2010

Проблема:

Мне нужны оба этих файла, PathwaysMDF и PathwaysLDF, чтобы заменить (перезаписать) старые копии при серьезном обновлении.

Хорошо, этот WiX сводит меня с ума.Файл настроек работает отлично, однако файлы базы данных все еще не работают!Я пробовал несколько подходов ...

Вот код, пытающийся это сделать с помощью ключа реестра:

<Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D" >
<RegistryValue Root="HKLM" Key="Software\TDR\Pathways\Database" Name="installed" Type="integer" Value="1" KeyPath="yes" />
<File Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" />
<File Id="pathwaysLdf" Name="Pathways_log.ldf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.ldf"/>
</Component>

Это приводит к тому, что старый файл LDF остается, а нет Файл MDF там вообще, когда завершено, ни старый, ни новый.

Вот что говорит журнал об этой попытке: (полный журнал на http://pastebin.com/a8a7uKfL)

MSI (s) (C8:80) [09:01:51:845]: Executing op: SetTargetFolder(Folder=C:\Documents and Settings\All Users\Application Data\Pathways) MSI (s) (C8:80) [09:01:51:845]: Executing op: SetSourceFolder(Folder=1\ykpqggg9\Pathways\|CommonAppData\Pathways) MSI (s) (C8:80) [09:01:51:845]: Executing op: FileCopy(SourceName=x_gekdq7.ldf|Pathways_log.ldf,SourceCabKey=pathwaysLdf,DestName=Pathways_log.ldf,Attributes=512,FileSize=40239104,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=-403787921,HashPart2=771061375,HashPart3=-1732951415,HashPart4=-1390528611,,) MSI (s) (C8:80) [09:01:51:845]: File: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways_log.ldf; Won't Overwrite; Won't patch; Existing file is unversioned but modified MSI (s) (C8:80) [09:01:51:845]: Executing op: FileCopy(SourceName=Pathways.mdf,SourceCabKey=pathwaysMdf,DestName=Pathways.mdf,Attributes=512,FileSize=156368896,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=570808063,HashPart2=-1571218748,HashPart3=-867678845,HashPart4=601212343,,) MSI (s) (C8:80) [09:01:51:845]: File: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways.mdf; Won't Overwrite; Won't patch; Existing file is unversioned but modified

Вот код, который пытается это сделать, используя сопутствующий файл (исполняемый файл основной программы, который имеет версии):

<Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D" >
<File Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" CompanionFile="pathwaysExe" />
<File Id="pathwaysLdf" Name="Pathways_log.ldf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.ldf" CompanionFile="pathwaysExe" />
</Component>

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

Вот что говорит журнал об этой попытке: (полный журнал на http://pastebin.com/gijLN5QY):

MSI (s) (C8:F8) [09:21:55:206]: Executing op: SetCompanionParent(ParentPath=C:\Program Files\Pathways\,ParentName=Pathways.exe,ParentVersion=1.1.5.0,ParentLanguage=0) MSI (s) (C8:F8) [09:21:55:206]: Executing op: FileCopy(SourceName=Pathways.mdf,SourceCabKey=pathwaysMdf,DestName=Pathways.mdf,Attributes=512,FileSize=156368896,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,Version=pathwaysExe,,InstallMode=58982400,,,,,,,) MSI (s) (C8:F8) [09:21:55:236]: File: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways.mdf; Overwrite; Won't patch; Existing file is of an equal version (Checked using version of companion: C:\Program Files\Pathways\Pathways.exe) MSI (s) (C8:F8) [09:21:55:236]: Source for file 'pathwaysMdf' is compressed InstallFiles: File: Pathways.mdf, Directory: C:\Documents and Settings\All Users\Application Data\Pathways\, Size: 156368896 MSI (s) (C8:F8) [09:21:55:246]: Re-applying security from existing file. MSI (s) (C8:F8) [09:21:55:246]: Verifying accessibility of file: Pathways.mdf MSI (s) (C8:F8) [09:21:55:266]: Note: 1: 2318 2: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways.mdf MSI (s) (C8:F8) [09:21:55:266]: Note: 1: 2360 MSI (s) (C8:F8) [09:21:55:266]: Note: 1: 2360

Я также пытался установить только для MDF-файла значение KeyPath = "yes" без тега CompanionFile. Это также не работает. Пожалуйста, есть предложения? СПАСИБО!

Ответы [ 2 ]

1 голос
/ 07 августа 2013

Мне кажется, что дизайн апгрейда с WiX сильно испорчен. Что должно происходить, так это то, что каждый файл по умолчанию должен «всегда заменять» что-либо. Только файлы, отмеченные соответствующим атрибутом, должны рассматриваться для контроля версий и других соображений.

WiX, по-видимому, предназначен только для установки .exe и .dll или других файлов с явно известной версией. Это прискорбно, потому что это могло бы быть намного более эффективным и остановить так много людей, тратящих свое время, если бы оно действительно было разработано как механизм установки общего назначения.

0 голосов
/ 06 мая 2010

Попробуйте удалить записи RemoveFile в компоненте Database. Они говорят установщику удалять только при удалении, при обновлении процесс UPGRADINGPRODUCTCODE не удаляется. Кроме того, вам нужна только запись removefile, если вы хотите удалить файл, который не был создан вашим установщиком (или если вы хотите контролировать то, что происходит, например удаление только при обновлении и т. Д.)

в любом случае попробуйте это

  <Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D">
       <File KeyPath="yes" Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" />
       <File Id="pathwaysLdf" Name="Pathways_log.ldf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.ldf" />
   </Component>

РЕДАКТИРОВАТЬ 1

Если вы сталкиваетесь с этими проблемами, всегда полезно посмотреть журнал, чтобы создать журнал, запустите следующую команду

msiexec / i "\ PATHTOSETUP \ setup.msi" / l * xv

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

Если приведенное выше предложение не помогает, вы можете вставить свой журнал куда-нибудь, например http://pastebin.com/

РЕДАКТИРОВАТЬ 2

Ok. Файл pathwaysmdf не версионный. Когда дело доходит до обновления, установщик Windows сравнивает текущий и новый файл, если они оба не версированы и файл изменился, он предполагает, что пользователь изменил его и, следовательно, оставляет его. Это сравнение выполняется по ключевому пути, который в вашем случае является файлом pathwaysmdf. Чтобы это исправить, создайте фиктивный файл или раздел реестра в качестве пути к ключам компонентов. Я бы предложил что-то вроде ключа реестра

HKLM\Software\YOURCOMPANY\YOURPRODUCT\Database\Isinstalled = 1
...