2012-10-10 36 views
2

在这里需要一些帮助......WIX - 无法修补的安装后,它已被修补

的错误升级补丁不能由Windows Installer服务安装,因为要升级程序可能会丢失,或者升级补丁可能会更新该程序的不同版本。验证要升级的程序是否存在于您的计算机上,并且您具有正确的升级补丁程序。

我做了以下...

  1. 创建MSI版本1.0(GUID自动创建),产品编号= “*”
  2. 创建了一个反对对1.0补丁(MSP)。 wixpdb版本1.1(更新代码已设置),ProductId =“{GUID1}”,pyro给出了关于更改产品代码的警告。
  3. 针对1.1.wixpdb版本1.2创建了另一个补丁(MSP)(保留相同的更新代码)。 ProductId =“{GUID1}”,无法安装。

方案... 安装MSI v1.0 - >安装MSP 1.1 =正常工作。

安装MSI v1.0 - >安装MSP 1.1 - >安装MSP 1.2 =失败,windows无法找到应用程序。

安装MSI v1.1 - >安装MSP 1.2 =正常工作。

对我来说,这意味着当第一个补丁(1.1)发生故障时可能不会更新,或者在创建补丁1.2时我需要考虑1.0和1.1。我已尝试各种选择,从使用范围内...

任何想法?

更新/补丁代码...

Product.wxs

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" 
     Name="WiX Patch Example Product" 
     Language="1033" 
     Version="1.0.0" 
     Manufacturer="Dynamo Corporation" 
     UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD"> 

     <Package Description="Installs a file that will be patched." 
      Comments="This Product does not install any executables" 
      InstallerVersion="200" 
      Compressed="yes" /> 

     <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 
     <FeatureRef Id="SampleProductFeature"/> 

    </Product> 

    <Fragment> 
     <Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1"> 
      <ComponentRef Id="File_1.txt" /> 
      <ComponentRef Id="File_2.txt" /> 
      <ComponentRef Id="File_3.txt" /> 

     </Feature> 
    </Fragment> 

    <Fragment> 
     <DirectoryRef Id="SampleProductFolder"> 
      <Component Id="File_1.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1"> 
       <File Id="File_1.txt" Name="File 1.txt" Source=".\$(var.Version)\File 1.txt" />    
      </Component> 
      <Component Id="File_2.txt" Guid="{b9b267a3-5648-4e32-9ab1-f3032980f6c2}" DiskId="1"> 
       <File Id="File_2.txt" Name="File 2.txt" Source=".\$(var.Version)\File 2.txt" />    
      </Component> 
      <Component Id="File_3.txt" Guid="{1df728ae-333d-47c5-9558-c0923f958a8d}" DiskId="1">     
       <File Id="File_3.txt" Name="File 3.txt" Source=".\$(var.Version)\File 3.txt" /> 
      </Component>    

     </DirectoryRef> 
    </Fragment> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" Name="PFiles"> 
       <Directory Id="SampleProductFolder" Name="Patch Sample Directory"> 
       </Directory> 
      </Directory> 
     </Directory> 
    </Fragment> 
</Wix> 

产品1.1.wxs

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD" 
     Name="WiX Patch Example Product" 
     Language="1033" 
     Version="1.1.0" 
     Manufacturer="Dynamo Corporation" 
     UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD"> 

     <Package Description="Installs a file that will be patched." 
      Comments="This Product does not install any executables" 
      InstallerVersion="200" 
      Compressed="yes" /> 

     <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 
     <FeatureRef Id="SampleProductFeature"/> 

    </Product> 

    <Fragment> 
     <Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1"> 
      <ComponentRef Id="File_1.txt" /> 
      <ComponentRef Id="File_2.txt" /> 
      <ComponentRef Id="File_3.txt" /> 

      <ComponentRef Id="File_4.txt" /> 
     </Feature> 
    </Fragment> 

    <Fragment> 
     <DirectoryRef Id="SampleProductFolder"> 
      <Component Id="File_1.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1"> 
       <File Id="File_1.txt" Name="File 1.txt" Source=".\$(var.Version)\File 1.txt" />    
      </Component> 
      <Component Id="File_2.txt" Guid="{b9b267a3-5648-4e32-9ab1-f3032980f6c2}" DiskId="1"> 
       <File Id="File_2.txt" Name="File 2.txt" Source=".\$(var.Version)\File 2.txt" />    
      </Component> 
      <Component Id="File_3.txt" Guid="{1df728ae-333d-47c5-9558-c0923f958a8d}" DiskId="1">     
       <File Id="File_3.txt" Name="File 3.txt" Source=".\$(var.Version)\File 3.txt" /> 
      </Component> 


      <Component Id="File_4.txt" Guid="{f728f62d-91f4-4c78-b2fe-65a9f0f6043c}" DiskId="1">     
       <File Id="File_4.txt" Name="File 4.txt" Source=".\$(var.Version)\File 4.txt" /> 
      </Component>   
     </DirectoryRef> 
    </Fragment> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" Name="PFiles"> 
       <Directory Id="SampleProductFolder" Name="Patch Sample Directory"> 
       </Directory> 
      </Directory> 
     </Directory> 
    </Fragment> 
</Wix> 

产品1.2.wxs

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 

    <Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD" 
     Name="WiX Patch Example Product" 
     Language="1033" 
     Version="1.2.0" 
     Manufacturer="Dynamo Corporation" 
     UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD"> 

     <Package Description="Installs a file that will be patched." 
      Comments="This Product does not install any executables" 
      InstallerVersion="200" 
      Compressed="yes" /> 

     <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> 
     <FeatureRef Id="SampleProductFeature"/> 

    </Product> 

    <Fragment> 
     <Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1"> 
      <ComponentRef Id="File_1.txt" /> 
      <ComponentRef Id="File_2.txt" /> 
      <ComponentRef Id="File_3.txt" /> 

      <ComponentRef Id="File_4.txt" /> 
     </Feature> 
    </Fragment> 

    <Fragment> 
     <DirectoryRef Id="SampleProductFolder"> 
      <Component Id="File_1.txt" Guid="{d738b2a9-0dbc-4381-9efd-5801723b1569}" DiskId="1"> 
       <File Id="File_1.txt" Name="File 1.txt" Source=".\$(var.Version)\File 1.txt" />    
      </Component> 
      <Component Id="File_2.txt" Guid="{b9b267a3-5648-4e32-9ab1-f3032980f6c2}" DiskId="1"> 
       <File Id="File_2.txt" Name="File 2.txt" Source=".\$(var.Version)\File 2.txt" />    
      </Component> 
      <Component Id="File_3.txt" Guid="{1df728ae-333d-47c5-9558-c0923f958a8d}" DiskId="1">     
       <File Id="File_3.txt" Name="File 3.txt" Source=".\$(var.Version)\File 3.txt" /> 
      </Component> 


      <Component Id="File_4.txt" Guid="{f728f62d-91f4-4c78-b2fe-65a9f0f6043c}" DiskId="1">     
       <File Id="File_4.txt" Name="File 4.txt" Source=".\$(var.Version)\File 4.txt" /> 
      </Component>   
     </DirectoryRef> 
    </Fragment> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" Name="PFiles"> 
       <Directory Id="SampleProductFolder" Name="Patch Sample Directory"> 
       </Directory> 
      </Directory> 
     </Directory> 
    </Fragment> 
</Wix> 

补丁1.1

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Patch 
     AllowRemoval="yes" 
     Manufacturer="Dynamo Corp" 
     MoreInfoURL="http://www.dynamocorp.com/" 
     DisplayName="Sample Patch" 
     Description="Small Update Patch" 
     Classification="Update" 
     OptimizedInstallMode="yes"> 

     <Media Id="8000" Cabinet="RTM.cab" CompressionLevel="none"> 
      <PatchBaseline Id="RTM"> 

      </PatchBaseline> 
     </Media> 

     <PatchFamilyRef Id="SamplePatchFamily"/>  
    </Patch> 

    <Fragment>  
     <PatchFamily Id='SamplePatchFamily' Version='1.1.0' Supersede='no'> 


     </PatchFamily> 
    </Fragment> 
</Wix> 

1.2补丁

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Patch 
     AllowRemoval="yes" 
     Manufacturer="Dynamo Corp" 
     MoreInfoURL="http://www.dynamocorp.com/" 
     DisplayName="Sample Patch" 
     Description="Small Update Patch" 
     Classification="Update" 
     OptimizedInstallMode="yes"> 

     <Media Id="8000" Cabinet="RTM.cab" CompressionLevel="none"> 
      <PatchBaseline Id="RTM"> 

      </PatchBaseline> 
     </Media> 

     <PatchFamilyRef Id="SamplePatchFamily"/>  
    </Patch> 

    <Fragment>  
     <PatchFamily Id='SamplePatchFamily' Version='1.2.0' Supersede='no'> 


     </PatchFamily> 
    </Fragment> 
</Wix> 
+0

这个问题似乎是,当MSI生成时,使用自动生成的GUID。当补丁1.1使用不同的GUID ...任何方式来纠正或至少执行更新为1.2? –

+0

我已经尝试创建从1.0到1.2和从1.1到1.2的wixmst,仍然无法正常工作... –

回答

0

您需要全线静电产品的ID。您可以使用Orca进入并从您的1.0 msi中找到产品ID。在1.1和1.2的product.wxs ProductId中使用该guid。

0

使您的ProductId静态将有助于修补方案,每一个下一个修补程序将工作。

但是请记住运行.msi例如在版本1.3修补程序(甚至版本1.0 msi)后版本1.5将失败,并显示:“该产品的另一个版本已安装...”消息。所以,当你坚持使用相同的产品ID时,只提供补丁(.msi创建的.msp),以及何时需要提供新补丁。msi确保您更改产品ID。

我对这个答案肯定太晚了,但是我只是在这个问题上浪费了整整一天的时间,并且决定放弃,这样其他人就不必这样做了。

我猜MSI + MSP更新的两条规则是:

  1. 决不下制作补丁的MSI与不同的产品ID,他们将无法找到的产品,将不能运行

  2. 决不提供不同的MSI具有相同的产品ID,他们将会失败,“安装了另一个版本”,将无法运行

这本来是简单得多,如果不同MSI刚刚使用相同的产品ID覆盖了以前的产品ID,但必须有一个很好的理由...