Проблема с обновлением WiX!
Эта проблема:
Мне нужны оба этих файла, 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 GONE. Старый и новый, пропавший без вести.
Вот что пишет журнал об этой попытке: (полный журнал на 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 ответа
Мне кажется, что дизайн апгрейда с WiX сильно испорчен. Что должно происходить, так это то, что каждый файл по умолчанию должен "всегда заменять" что-либо. Только файлы, отмеченные соответствующим атрибутом, должны рассматриваться для контроля версий и других соображений.
Похоже, WiX предназначен только для установки.exe и.dll или других файлов с явно известной версией. Это прискорбно, потому что это могло бы быть намного более эффективным и остановить так много людей, которые тратили бы впустую свое время, если бы это было фактически разработано, чтобы быть механизмом установки общего назначения.
Попробуйте удалить записи 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
Хорошо. Файл pathwaysmdf не версионный. Когда дело доходит до обновления, установщик Windows сравнивает текущий и новый файл, если они не версионные и файл был изменен, он предполагает, что пользователь изменил его и, следовательно, оставляет его. Это сравнение выполняется по ключевому пути, который в вашем случае является файлом pathwaysmdf. Чтобы это исправить, создайте фиктивный файл или раздел реестра в качестве пути к ключам компонентов. Я хотел бы предложить что-то вроде ключа реестра
HKLM\Software\YOURCOMPANY\YOURPRODUCT\Database\Isinstalled = 1