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 - Fatal编程技术网

Wix工具集:从一个安装程序中删除另一个安装程序的内容

Wix工具集:从一个安装程序中删除另一个安装程序的内容,wix,windows-installer,Wix,Windows Installer,我有两名安装人员: 安装程序A安装.dll v1.0.0.0 安装程序B将A.dll更新为v2.0.0.0 当我卸载B时,它不会删除A.dll。版本为2.0.0.0的.dll仍然存在 A.dll(v2.0.0.0)只能从安装程序A中删除 安装程序具有不同的升级代码和组件ID 如何从安装程序B中删除替换的产品内容?两个设置之间共享的文件(两个设置将文件安装到相同的绝对路径)必须保持一个稳定的组件GUID,以允许Windows installer引用计数正常工作。在Windows Installer

我有两名安装人员:

  • 安装程序A安装.dll v1.0.0.0
  • 安装程序B将A.dll更新为v2.0.0.0
  • 当我卸载B时,它不会删除A.dll。版本为2.0.0.0的.dll仍然存在

    A.dll(v2.0.0.0)只能从安装程序A中删除

    安装程序具有不同的升级代码和组件ID


    如何从安装程序B中删除替换的产品内容?

    两个设置之间共享的文件(两个设置将文件安装到相同的绝对路径)必须保持一个稳定的组件GUID,以允许Windows installer引用计数正常工作。在Windows Installer中实现这一点的机制是。WiX采用自己的方式处理共享文件,采用方法


    不久前我写了一个答案,其中包含了有关合并模块和WiX包含文件的更多信息:


    如果需要对不同的应用程序使用不同版本的dll,则应将它们安装到每个应用程序的专用位置,并且它们应具有不同的组件GUID:

    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyExe.exe version 1.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyDll.dll version 1.0.0
    
    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyExe.exe version 2.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp2\MyDll.dll version 2.0.0
    
    或者,您可以将它们安装到单独文件夹中的共享位置,并通过清单正确绑定:

    CommonFilesFolder\MyCompanySharedFiles\1.0\MyExe.exe version 1.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyDll.dll version 1.0.0
    
    CommonFilesFolder\MyCompanySharedFiles\2.0\MyExe.exe version 2.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp2\MyDll.dll version 2.0.0
    
    CommonFilesFolder\MyCompanySharedFiles\2.5\MyExe.exe version 2.5.8
    ProgramFilesFolder\MyCompanyFolder\MyApp2\MyDll.dll version 2.0.0
    
    您可以使用单独的MSI部署共享文件,以便在不重新编译主MSI的情况下对其进行更新,也可以使用合并模块将共享文件编译到主MSI中(某种静态链接)

    最后,如果共享文件是.NET程序集(但不是),则可以将其安装到GAC:

    或者您可以将本机Win32文件安装到WinSxS并排文件夹中。对于本机文件,您还可以在System32或SysWOW64或其他非并排但共享的文件夹中安装shared


    这里有一个类似的答案:。比上面的描述要详细得多

    下面是对Windows Installer组件引用实际工作原理的一个相当全面(但遗憾的是过于详细)的描述:



    最后给出了一个答案,并就如何通过使用默认属性和启用自动组件GUID生成来改进和简化WiX文件提出了一些建议。强烈建议您签出:。不要让标题迷惑你,这是一般的WiX建议。我特别建议查看自动组件GUID功能,因为它将帮助您正确分配组件GUID。

    两个设置之间共享的文件(两个设置将文件安装到相同的绝对路径)必须保持一个,稳定的组件GUID,允许Windows Installer引用计数正常工作。在Windows Installer中实现这一点的机制是。WiX采用自己的方式处理共享文件,采用方法


    不久前我写了一个答案,其中包含了有关合并模块和WiX包含文件的更多信息:


    如果需要对不同的应用程序使用不同版本的dll,则应将它们安装到每个应用程序的专用位置,并且它们应具有不同的组件GUID:

    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyExe.exe version 1.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyDll.dll version 1.0.0
    
    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyExe.exe version 2.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp2\MyDll.dll version 2.0.0
    
    或者,您可以将它们安装到单独文件夹中的共享位置,并通过清单正确绑定:

    CommonFilesFolder\MyCompanySharedFiles\1.0\MyExe.exe version 1.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp1\MyDll.dll version 1.0.0
    
    CommonFilesFolder\MyCompanySharedFiles\2.0\MyExe.exe version 2.0.0
    ProgramFilesFolder\MyCompanyFolder\MyApp2\MyDll.dll version 2.0.0
    
    CommonFilesFolder\MyCompanySharedFiles\2.5\MyExe.exe version 2.5.8
    ProgramFilesFolder\MyCompanyFolder\MyApp2\MyDll.dll version 2.0.0
    
    您可以使用单独的MSI部署共享文件,以便在不重新编译主MSI的情况下对其进行更新,也可以使用合并模块将共享文件编译到主MSI中(某种静态链接)

    最后,如果共享文件是.NET程序集(但不是),则可以将其安装到GAC:

    或者您可以将本机Win32文件安装到WinSxS并排文件夹中。对于本机文件,您还可以在System32或SysWOW64或其他非并排但共享的文件夹中安装shared


    这里有一个类似的答案:。比上面的描述要详细得多

    下面是对Windows Installer组件引用实际工作原理的一个相当全面(但遗憾的是过于详细)的描述:



    最后给出了一个答案,并就如何通过使用默认属性和启用自动组件GUID生成来改进和简化WiX文件提出了一些建议。强烈建议您签出:。不要让标题迷惑你,这是一般的WiX建议。我特别建议查看自动组件GUID功能,因为它将帮助您正确分配组件GUID。

    在我的答案底部添加了另一个链接。在我的答案底部添加了另一个链接。