1

メジャー アップグレードで古いコピーを置き換える (上書きする) には、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 ファイルがまったく存在しなくなります。完了時には、古いファイルでも新しいファイルでもありません

その試みについてのログは次のとおりです

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

また、CompanionFile タグなしで MDF ファイルだけを KeyPath="yes" に設定しようとしました。これも機能していません。

4

2 に答える 2

0

データベース コンポーネントの RemoveFile エントリを削除してみてください。アンインストール時にのみ削除するようにインストーラーに指示しています。アップグレード時には、プロセスはUNINSTALLではなく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。pathsmdf ファイルはバージョン管理されていません。アップグレード時に、Windows インストーラーは、現在のファイルと新しいファイルの両方がバージョン管理されておらず、ファイルが変更されている場合、それらを比較し、ユーザーがファイルを変更したと見なしてそのままにします。この比較は、あなたの場合はpathwaysmdfファイルであるキーパスで行われます。これを修正するには、コンポーネントのキーパスとしてダミー ファイルまたはレジストリ キーを作成します。レジストリキーのようなものをお勧めします

HKLM\Software\YOURCOMPANY\YOURPRODUCT\Database\Isinstalled = 1
于 2010-05-06T09:03:45.353 に答える