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-卸载另一个产品另一个上下文,重新分发MFC_Mfc_Wix_Uninstallation_Redistributable - Fatal编程技术网

Wix-卸载另一个产品另一个上下文,重新分发MFC

Wix-卸载另一个产品另一个上下文,重新分发MFC,mfc,wix,uninstallation,redistributable,Mfc,Wix,Uninstallation,Redistributable,我们希望安装程序A必须: 删除另一个产品B(我们知道它的产品guid) 重新发布MFC 2008、2010和2012 在HKLM中写入注册表项 B是按用户安装的。因为在我们当前的实现中,使用合并模块重新分发MFC,所以它在每台机器上安装。因此,使用相同升级代码的MajorUpgrade不起作用。在安装过程中,我们还尝试将脚本“msiexec/x{PRODUCT GUID OF B}/q”作为自定义操作运行,但Windows有一个互斥锁(_msiexect),每台计算机只允许一个执行序列;因此

我们希望安装程序A必须:

  • 删除另一个产品B(我们知道它的产品guid)
  • 重新发布MFC 2008、2010和2012
  • 在HKLM中写入注册表项
B是按用户安装的。因为在我们当前的实现中,使用合并模块重新分发MFC,所以它在每台机器上安装。因此,使用相同升级代码的MajorUpgrade不起作用。在安装过程中,我们还尝试将脚本“msiexec/x{PRODUCT GUID OF B}/q”作为自定义操作运行,但Windows有一个互斥锁(_msiexect),每台计算机只允许一个执行序列;因此,这个想法不太管用

我们现在的想法是:

  • 使用不同于合并模块的另一种方式重新分发MFC,并按用户安装(即使它使用HKLM编写,是的,我知道这是一种不好的做法,但它很容易实现)
  • 将A的安装程序实现为引导程序/链接程序(因此A的安装程序将是类似setup.exe的文件),并在执行MSI后运行卸载命令

  • 你有什么建议?

    最后我找到了一个解决方案:

    • 编写一个程序(以C#.Net 3.5为例),安装a。如果安装成功,我们将卸载B。此外,我们确信客户的机器上安装了C#.Net 3.5
    • 使用iexpress“包装”上述程序和msi。输出将是一个自解压的.exe文件,它将执行上述程序。我们将此文件交付给客户