WiX安装程序声称成功,但未采取任何实际行动

时间:2019-07-15 22:21:20

标签: wix windows-installer

这是对this question(相同的项目新症状)的跟踪。

我已使用Visual Studio中的WiX安装工具为C#Windows Forms应用程序创建创建安装程序。计划是让SCCM将应用程序推送到我们的50多个(Windows 10)工作站。

当前,此.msi无法通过SCCM手动执行或推送。不管采用哪种方法,(非)结果都是相同的:

此安装程序 会删除目标系统上安装的所有先前版本。然后,它声称已安装了新版本(1.1.1.1),并且新版本显示在“设置”中的“应用程序和功能”列表上。在注册表中放置了对新版本应用程序的引用。

Windows 10 thinks the Product is Installed

但是,没有安装任何文件,也没有创建任何文件夹或快捷方式。先前存在的文件,文件夹和快捷方式将被删除。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="82106de5-4591-4239-8356-a7cfa44fbc16" Name="PHSRP Dashboard" Language="1033" Version="1.1.1.1" Manufacturer="CSUS Public Health Survey Research Program" UpgradeCode="8420CB2B-6692-4BB9-A15A-023C7E69FB26">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/>

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed."
                  AllowSameVersionUpgrades="yes"
                  IgnoreRemoveFailure="yes"
     />
    <MediaTemplate />
    <!-- UIRef Id="WixUI_Minimal"     Adds License dialog         -->
    <!-- UIRef Id="WixUI_Advanced"    Adds multiple dialog option popups  -->


    <Feature Id="MainProduct" Title="PHSRP Dashboard" Level="1" Absent="disallow">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="CMP_StartMenu_Dashboard"/>
      <ComponentRef Id="CMP_DashboardAutoStart"/>
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFiles64Folder">
        <Directory Id="PHSRP" Name="PHSRP" />
      </Directory>

      <Directory Id="ProgramMenuFolder">
        <Directory Id="PHSRP_Menu" Name="PHSRP"/>
      </Directory>

      <Directory Id="StartupFolder"/>

    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="PHSRP">

      <Component Id="CMP_Dashboard.EXE" Guid="939EC7DE-E6BD-4364-BFC7-7B03C03B7CBB">
        <File Id="FILE_Dashboard.EXE" Source="$(var.PHSRP_Dashboard.TargetDir)PHSRP_Dashboard.exe" KeyPath ="yes"/>
      </Component>

      <Component Id="CMP_DasboardConfig" Guid="4081EC5F-EAD0-4003-8B43-DFF1EF6B4348">
        <File Id="FILE_DashboardConfig" Source="$(var.PHSRP_Dashboard.TargetDir)\PHSRP_Dashboard.exe.config" KeyPath ="yes"/>
      </Component>

      <Component Id="CMP_EntityFramework" Guid="D685B056-E64C-4C9A-B0B0-C74DC5EF085E">
        <File Id="FILE_EntityFramework" Source="$(var.PHSRP_Dashboard.TargetDir)\EntityFramework.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_EntityFrameworkSqlServer" Guid="E017DCC8-1439-4CB6-BFDB-A8C86BF99D74">
        <File Id="FILE_EntityFrameworkSqlServer" Source="$(var.PHSRP_Dashboard.TargetDir)\EntityFramework.SqlServer.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_ReportViewerCommon" Guid="972220E8-5DD4-451D-847D-32DAC050D639">
        <File Id="FILE_ReportViewerCommon" Source="C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\12.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.Common.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_ReportViewerDataVisualization" Guid="B0AF7500-5743-4B48-85FA-9BA12E3B554A">
        <File Id="FILE_ReportViewerDataVisualization" Source="C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.DataVisualization\12.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.DataVisualization.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_ReportViewerProcessingObjectModel" Guid="75E5E7AD-E1AF-41BC-BC95-464272966629">
        <File Id="FILE_ReportViewerProcessingObjectModel" Source="C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.ProcessingObjectModel\12.0.0.0__89845dcd8080cc91\Microsoft.ReportViewer.ProcessingObjectModel.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_ReportViewerWinForms" Guid="831D08B1-047B-46E0-AA89-C1D47B0B4EBE">
        <File Id="FILE_ReportViewerWinForms" Source="C:\Program Files (x86)\Microsoft Visual Studio 14.0\ReportViewer\Microsoft.ReportViewer.WinForms.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_SQLServerTypes" Guid="EE385FEE-A4C9-4F9A-800E-F2B9C573DCA7">
        <File Id="FILE_SQLServerTypes" Source="C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.Types\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types.dll" KeyPath="yes"/>
      </Component>

      <Component Id="CMP_SystemNetHttp" Guid="F56581DD-D9D0-4140-BB66-9DEF7FF66D7B">
        <File Id="FILE_SystemNetHttp" Source="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll" KeyPath="yes"/>
      </Component>
    </ComponentGroup>

    <DirectoryRef Id="PHSRP_Menu">
      <Component Id="CMP_StartMenu_Dashboard" Guid="B8C6D5CE-26BD-45E1-904D-97FC3EEADAE8">
        <Shortcut Id="SCUT_RunDashboard" Name="PHSRP Dashboard" Description="Start Dashboard" 
                  Target="[#FILE_Dashboard.EXE]"
                  WorkingDirectory="PHSRP" />

        <RemoveFolder Id="UI_RemoveShortcut" Directory="PHSRP_Menu" On="uninstall"/>
        <RegistryKey Root="HKCU" Key="Software\PHSRP\PHSRP_Dashboard">
          <RegistryValue Name="sm_shortcut" Type="integer" Value="1" KeyPath="yes"/>
        </RegistryKey>
      </Component>
    </DirectoryRef>

    <DirectoryRef Id="StartupFolder">
      <Component Id="CMP_DashboardAutoStart" Guid="E10E004B-8A38-43F9-8365-4C44267565F2">
        <Shortcut Id="SCUT_DashboardAutoStart" Name="PHSRP Dashboard" Description="AutoStart Dashboard"
                  Target="[#FILE_Dashboard.EXE]"
                  WorkingDirectory="PHSRP" />

        <RegistryKey Root="HKCU" Key="Software\PHSRP\PHSRP_Dashboard">
          <RegistryValue Name="su_shortcut" Type="integer" Value="1" KeyPath="yes"/>
        </RegistryKey>
      </Component>
    </DirectoryRef>

  </Fragment>
</Wix>

install log太大,无法包含在这篇文章中,并且我对这个过程还不够熟悉,无法知道可以删除哪些行,因此它已发布在我的Google驱动器上。

这表示安装成功:

    MSI (s) (DC:40) [18:34:09:378]: Note: 1: 1728 
    MSI (s) (DC:40) [18:34:09:378]: Note: 1: 2205 2:  3: Error 
    MSI (s) (DC:40) [18:34:09:378]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1728 
    MSI (s) (DC:40) [18:34:09:378]: Note: 1: 2205 2:  3: Error 
    MSI (s) (DC:40) [18:34:09:378]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709 
    MSI (s) (DC:40) [18:34:09:378]: Product: PHSRP Dashboard -- Configuration completed successfully.

    MSI (s) (DC:40) [18:34:09:378]: Windows Installer reconfigured the product. Product Name: PHSRP Dashboard. Product Version: 1.1.1.1. Product Language: 1033. Manufacturer: CSUS Public Health Survey Research Program. Reconfiguration 

success or error status: 0.

我看到的最奇怪的是,所有组件“ Requests”都设置为Null,据我理解,这意味着“什么都不做”。为什么?

MSI (s) (DC:40) [18:34:09:300]: PROPERTY CHANGE: Deleting MsiRestartManagerSessionKey property. Its current value is '954c47bc279c3944a8f5054677c82967'.
MSI (s) (DC:40) [18:34:09:300]: Note: 1: 2205 2:  3: Dialog 
MSI (s) (DC:40) [18:34:09:300]: Feature: MainProduct; Installed: Advertise;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_Dashboard.EXE; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_DasboardConfig; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_EntityFramework; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_EntityFrameworkSqlServer; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_ReportViewerCommon; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_ReportViewerDataVisualization; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:300]: Component: CMP_ReportViewerProcessingObjectModel; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: CMP_ReportViewerWinForms; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: CMP_SQLServerTypes; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: CMP_SystemNetHttp; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: CMP_StartMenu_Dashboard; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: CMP_DashboardAutoStart; Installed: Absent;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: __CMP_StartMenu_Dashboard65; Installed: Null;   Request: Null;   Action: Null
MSI (s) (DC:40) [18:34:09:315]: Component: __CMP_DashboardAutoStart65; Installed: Null;   Request: Null;   Action: Null

这是另一个怪异之处-日志显示它不会删除现有产品(跳过RemoveExistingProducts),但是会删除现有版本:

MSI (s) (DC:40) [18:34:09:331]: Doing action: RemoveExistingProducts
MSI (s) (DC:40) [18:34:09:331]: Note: 1: 2205 2:  3: ActionText 
Action ended 18:34:09: InstallValidate. Return value 1.
MSI (s) (DC:40) [18:34:09:331]: Skipping RemoveExistingProducts action: current configuration is maintenance mode or an uninstall
Action start 18:34:09: RemoveExistingProducts.
MSI (s) (DC:40) [18:34:09:331]: Doing action: InstallInitialize
MSI (s) (DC:40) [18:34:09:331]: Note: 1: 2205 2:  3: ActionText 
Action ended 18:34:09: RemoveExistingProducts. Return value 0.

为什么将此安装称为“维护模式或卸载”?

  

更新:

     

我在新镜像的计算机上运行了安装。安装   正常完成后,所有文件和快捷方式都存在,但是对于   由于某些原因,应用程序根本无法运行。双击   PHSRP_Dashboard.exe文件不会产生任何错误消息。的   应用程序日志显示.NET错误,然后显示应用程序错误。我不   知道这是否与我的应用程序有关,即新计算机的网络   连接或安装程序。不过我今天已经完成了   明天。

     

new install log处于在线状态。

     

更新2:

     

新工作站上的问题是配置问题。的   安装程序正在按预期工作-至少在手动运行时。我需要   再次尝试SCCM。

这个难题的最后一部分是修复对我用于SCCM测试的机器造成的任何损坏。我可以给它们重新成像,但希望避免这种情况。任何建议都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

  

启动错误 :该应用程序启动问题可能是一个小问题,例如缺少运行时。甚至 .NET framework 本身? (对我来说就是那个)。我先检查一下。您还需要其他哪些运行时? Java Visual Studio C/C++ Runtime ,等等...

启动错误检查列表 :我在这里有这个 "torpedoes full spread check-list" Desktop applicaton not opening after installation in client system 。从本质上讲,是一个“想法列表”,用于说明启动过程中可能出现的错误。尚不完整,但足够大,足以让人叹为观止。


先决条件 :简要查看了一下,看来此源中存在一些问题,这些问题涉及应通过运行时安装而不是包含这些文件的文件作为文件直接在您自己的MSI中。运行时似乎是:

  • .NET Framework (以适用的版本为准)
  • Microsoft Report Viewer 20122015-不确定哪个)
  • Microsoft CLR Types for SQL Server (2012年,2014年,2016年-不确定哪个)

SCCM :您需要通过可从Microsoft下载的自己的MSI文件来部署这些先决条件/运行时。对于一般用途的分发,您可以制作Burn捆绑包(用于WiX的setup.exe生成器)或许多可以执行相同操作的部署工具(Installshield,Advanced Installer等)。就您而言,您只是通过SCCM将它们推出,但是牵着马...

清理 :您需要删除WiX源中这些文件的错误包含,这将导致卸载和重大升级(重大升级卸载)的副作用旧版本并安装新版本)。 MSI文件认为您“拥有”设置中包含的任何文件(除非您将其标记为不受MSI控制)。因此,他们将尝试“提取”您包含的文件。这可能会导致您的应用程序无法启动或无法正确运行(以及其他应用程序也取决于这些运行时)。请注意,由于具有OS覆盖功能,MSI文件并非总是能够成功卸载文件。

  • 错误包含 :请从 GAC {{1} } Visual Studio folders 。通常,您永远不应从那里包含要部署的单个文件。查找运行时程序包。编译新的MSI并开始对其进行测试。请不要在太多肮脏的系统上进行测试。您可以通过手动删除文件来模拟脏状态。

  • 清理过程 :在升级到最新版本期间-现在没有错误包含的运行时文件-您可能会看到这些运行时文件已被“剔除” ”。现在,您需要在升级软件包之后部署先决条件。这应该将运行时文件放回原处。希望(可能还有其他问题)。

  
      
  • 悬挂版本 :您先前的问题似乎表明您在这些系统上可能具有“悬挂版本”。为了   处理这个,我会诚实地通过以下方式撤回所有已部署的软件   SCCM,然后部署最新版本,最后部署运行时   上面讲过。
  •   

某些链接