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 从服务运行时,Windows Installer始终失败,并出现错误1601或1603_Wix_Windows Installer - Fatal编程技术网

Wix 从服务运行时,Windows Installer始终失败,并出现错误1601或1603

Wix 从服务运行时,Windows Installer始终失败,并出现错误1601或1603,wix,windows-installer,Wix,Windows Installer,我们有一个安装在客户位置的应用程序。此应用程序由作为Windows服务运行的自托管WCF服务器以及与此问题无关的客户端应用程序组成 我们通过让服务在后台下载WiX生成的.msi文件来向客户发布更新,然后在客户选择安装时安装。安装程序如下: 服务器将引导程序应用程序复制到临时路径并运行它,并将路径传递给要安装的MSI文件 引导程序使用MSI文件中的升级代码卸载以前的版本,然后安装新版本。它使用与MSI相关的各种P/Invoke调用调用安装程序,如msinstallproduct 引导程序重新启动服

我们有一个安装在客户位置的应用程序。此应用程序由作为Windows服务运行的自托管WCF服务器以及与此问题无关的客户端应用程序组成

我们通过让服务在后台下载WiX生成的.msi文件来向客户发布更新,然后在客户选择安装时安装。安装程序如下:

  • 服务器将引导程序应用程序复制到临时路径并运行它,并将路径传递给要安装的MSI文件
  • 引导程序使用MSI文件中的升级代码卸载以前的版本,然后安装新版本。它使用与MSI相关的各种P/Invoke调用调用安装程序,如
    msinstallproduct
  • 引导程序重新启动服务
  • 问题是,在几乎所有的呼叫客户站点上,这个自动化过程都失败了,尽管与所有事情一样,它在我们所在地的测试和生产中都有效。有时在卸载过程中会失败,但通常是在安装过程中。错误代码1601(InstallServiceFailure)和1603(InstallFailure)非常常见,因为它们对确定出错原因毫无帮助

    我们有一个备份过程,用户可以通过在Windows中运行引导程序手动调用安装程序(当然,需要以管理员身份运行)。这个过程不会失败,它使用的安装逻辑与失败的自动化过程完全相同

    所有服务都以帐户的形式运行,至少在服务器盒上具有管理权限

    我可以从哪里开始,或者尝试查找有关导致错误的原因的更多信息,或者更好的是,首先预防错误

    编辑以下是安装失败的详细日志文件的一个示例:

    === Verbose logging started: 3/29/2013  8:23:30  Build type: SHIP UNICODE 5.00.7600.00  Calling process: <<PATH TO MSI>> ===
    MSI (c) (00:7C) [08:23:30:194]: Resetting cached policy values
    MSI (c) (00:7C) [08:23:30:262]: Machine policy value 'Debug' is 0
    MSI (c) (00:7C) [08:23:30:418]: ******* RunEngine:
               ******* Product: <<PATH TO MSI>>
               ******* Action: 
               ******* CommandLine: **********
    MSI (c) (00:7C) [08:23:30:491]: Client-side and UI is none or basic: Running entire install on the server.
    MSI (c) (00:7C) [08:23:30:520]: Grabbed execution mutex.
    MSI (c) (00:7C) [08:23:30:562]: Failed to connect to server. Error: 0x800703FA
    
    MSI (c) (00:7C) [08:23:30:605]: Failed to connect to server.
    MSI (c) (00:7C) [08:23:30:637]: MainEngineThread is returning 1601
    === Verbose logging stopped: 3/29/2013  8:23:30 ===
    
    ==详细日志记录已开始:2013年3月29日8:23:30构建类型:SHIP UNICODE 5.00.7600.00调用过程:===
    MSI(c)(00:7C)[08:23:30:194]:重置缓存的策略值
    MSI(c)(00:7C)[08:23:30:262]:计算机策略值“Debug”为0
    MSI(c)(00:7C)[08:23:30:418]:*********运行引擎:
    *******产品:
    *******行动:
    *******命令行:**********
    MSI(c)(00:7C)[08:23:30:491]:客户端和UI为无或基本:在服务器上运行整个安装。
    MSI(c)(00:7C)[08:23:30:520]:抓取执行互斥。
    MSI(c)(00:7C)[08:23:30:562]:无法连接到服务器。错误:0x800703FA
    MSI(c)(00:7C)[08:23:30:605]:无法连接到服务器。
    MSI(c)(00:7C)[08:23:30:637]:MainEngineThread正在返回1601
    ===详细日志记录已停止:2013年3月29日8:23:30===
    
    这是一个太宽泛的问题,无法回答,但以下是我为其他客户设计的:

    1) 提升的服务将MSI下载到本地目录,并使用命令msiexec/jm foo.MSI“播发”(祝福)MSI

    2) 然后,非提升的客户端组件使用命令msiexec/I foo.MSI安装MSI

    MSI必须正确设计并符合UAC标准。从Install UI到Install Execute的转换将在没有UAC提示的情况下进行。只有正确计划(延迟而不模拟)的自定义操作才会运行


    当所有类型都完成后,客户对他们的自动更新模式非常满意

    这个问题太宽泛,无法回答,但以下是我为其他客户设计的:

    1) 提升的服务将MSI下载到本地目录,并使用命令msiexec/jm foo.MSI“播发”(祝福)MSI

    2) 然后,非提升的客户端组件使用命令msiexec/I foo.MSI安装MSI

    MSI必须正确设计并符合UAC标准。从Install UI到Install Execute的转换将在没有UAC提示的情况下进行。只有正确计划(延迟而不模拟)的自定义操作才会运行


    当所有类型都完成后,客户对他们的自动更新模式非常满意

    也许你需要看看另一个角落:


    过去,当我遇到奇怪的安装问题时,它们通常是由行为分析工具造成的,这些工具意外地阻止了他们不应该有的东西。如果某些此类工具可能是病毒扫描套件的一部分,或者相关计算机上安装了ThreatFire等独立应用程序,请确保更新过程所需的任何部分都没有列为“已阻止”。如果您的更新执行了导致行为分析组件自动处理的操作,请确保可靠地将它们列为白名单。

    也许您需要查看另一个角落:


    过去,当我遇到奇怪的安装问题时,它们通常是由行为分析工具造成的,这些工具意外地阻止了他们不应该有的东西。如果某些此类工具可能是病毒扫描套件的一部分,或者相关计算机上安装了ThreatFire等独立应用程序,请确保更新过程所需的任何部分都没有列为“已阻止”。如果您的更新执行的操作导致行为分析组件自动处理,请确保可靠地将其列为白名单。

    检查详细的日志文件。有很多关于Windows安装程序在服务下运行不愉快的报道,但具体情况各不相同。@RobMensching:谢谢。需要明确的是,该服务会启动第二个运行安装程序进程的可执行文件。所以,当它在服务会话中运行时,它不是在同一进程中运行的。我看到的大多数安装都失败了,因为系统是由于InstallShield在IS12之前的DCOM故障造成的。还有一些细微的差异,例如USERDNSDOMAIN等环境变量不属于系统配置文件的一部分。你真的