Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 修补程序包需要安装两次才能覆盖该文件?_Wix_Windows Installer_Msi Patch - Fatal编程技术网

Wix 修补程序包需要安装两次才能覆盖该文件?

Wix 修补程序包需要安装两次才能覆盖该文件?,wix,windows-installer,msi-patch,Wix,Windows Installer,Msi Patch,我用WIX做了一个补丁包,配置如下: <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Patch AllowRemoval="yes" Classification="Update" Comments="Patch forv.3.5.0.0" Description="Upd

我用WIX做了一个补丁包,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Patch
      AllowRemoval="yes"
      Classification="Update"
      Comments="Patch forv.3.5.0.0"
      Description="Updates to v.3.5.1.0"
      DisplayName="Patch v.3.5.0.0-v.3.5.1.0"
      MoreInfoURL=""
      Manufacturer=""
      TargetProductName="DDD">

    <Media Id="5000" Cabinet="MyPatch.cab">
      <PatchBaseline Id="MyPatch" />
    </Media>

    <PatchFamily
        Id="MyPatchFamily"
        Version="0.0.1.0"
        Supersede="yes" >
    </PatchFamily>

    <TargetProductCodes Replace="yes">
        <TargetProductCode Id="{0498A327-4DB6-47FD-91EB-F6B6496F2547}"/>
        <TargetProductCode Id="{6318BD0F-1B46-4AA2-B490-EC33785998B6}"/>
        <TargetProductCode Id="{2FF1A3B7-B781-42EA-9AE7-4A3816621B46}"/>
    </TargetProductCodes>

  </Patch>
</Wix>
这是第二次安装的日志

MSI (s) (A8:28) [09:05:01:778]: Executing op: FileCopy(SourceName=ihji0quu.con|DVStudio.exe.config,SourceCabKey=fileEE54A590D2CC2AE8647D5A5EB2C37313,DestName=DVStudio.exe.config,Attributes=4608,FileSize=5001,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=2020519154,HashPart2=1152590171,HashPart3=-1283096050,HashPart4=229789553,,)
MSI (s) (A8:28) [09:05:01:779]: File: C:\Program Files (x86)\DIAView\DVStudio.exe.config;   Won't Overwrite;    Won't patch;    Existing file is unversioned but modified
MSI (s) (A8:D4) [09:06:04:078]: Executing op: FileCopy(SourceName=ihji0quu.con|DVStudio.exe.config,SourceCabKey=fileEE54A590D2CC2AE8647D5A5EB2C37313,DestName=DVStudio.exe.config,Attributes=4608,FileSize=5001,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=2020519154,HashPart2=1152590171,HashPart3=-1283096050,HashPart4=229789553,,)
MSI (s) (A8:D4) [09:06:04:079]: File: C:\Program Files (x86)\DIAView\DVStudio.exe.config;   Overwrite;  Won't patch;    Existing file is unversioned and unmodified - hash doesn't match source file
MSI (s) (A8:D4) [09:06:04:079]: Source for file 'fileEE54A590D2CC2AE8647D5A5EB2C37313' is compressed
InstallFiles: File: DVStudio.exe.config,  Directory: C:\Program Files (x86)\DIAView\,  Size: 5001
MSI (s) (A8:D4) [09:06:04:081]: Re-applying security from existing file.
MSI (s) (A8:D4) [09:06:04:083]: Verifying accessibility of file: DVStudio.exe.config
MSI (s) (A8:D4) [09:06:04:084]: Using source file security for destination.
MSI (s) (A8:D4) [09:06:04:085]: Note: 1: 2318 2: C:\Config.Msi\8ba0779.rbf 

为什么会这样?

我想说,DVStudio.exe.config是在第一次安装之前(由用户或应用程序自己手动)修改的。在卸载修补程序时,此文件恢复为初始状态。在第二次安装时,可以更新此文件。是的,DVStudio。exe。安装后修改配置文件。但是,我后来修改了另外2个DLL,但仍然未能替换它们。修补程序使用特定版本x.y.z将assemby更新为特定版本x.y.z1。卸载时,版本为x.y.z1的程序集可以回滚到x.y.z,但如果您将此程序集修改为x.y.z2,它将无法恢复到x.y.z。原因是-将修补程序想象为增量(程序集x.y.z和x.y.z1的两个版本之间的二进制差异)-->程序集x.y.z+增量=程序集x.y.z1,但是组件x.y.z2-delta!=组件x.y.z。但是您的配置文件是一个无版本的文件,修补程序的工作方式不同。我想说的是,在第一次安装之前,DVStudio.exe.config已被修改(由用户或应用程序自己手动修改)。在卸载修补程序时,此文件恢复为初始状态。在第二次安装时,可以更新此文件。是的,DVStudio。exe。安装后修改配置文件。但是,我后来修改了另外2个DLL,但仍然未能替换它们。修补程序使用特定版本x.y.z将assemby更新为特定版本x.y.z1。卸载时,版本为x.y.z1的程序集可以回滚到x.y.z,但如果您将此程序集修改为x.y.z2,它将无法恢复到x.y.z。原因是-将修补程序想象为增量(程序集x.y.z和x.y.z1的两个版本之间的二进制差异)-->程序集x.y.z+增量=程序集x.y.z1,但是组件x.y.z2-delta!=组件x.y.z。但是您的配置文件是一个无版本的文件,修补程序的工作方式不同。