安装后无法启动wix c#应用程序

时间:2018-09-10 19:05:12

标签: c# wix windows-installer launching-application

我已经成功生成并使用Wix成功安装了C#WPF应用程序。该应用程序包括Crystal Report dll和Zen Barecode等其他dll。 在第n次尝试修改主项目后,MSI能够安装自身,但是通过从快捷方式或可执行文件直接启动应用程序,它不会启动。

这是我的wix产品。wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*"
           Name="MyApp 1.0.0"
           Language="1036"
           Codepage="1252"
           Version="1.0.0"
           Manufacturer="My Company"
           UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200"
             Compressed="yes"
             InstallScope="perMachine"
             Description="Some description"
             Keywords="Some keywords"
             Comments="(c) some comments"
             />

    <MajorUpgrade DowngradeErrorMessage="La dernière version de MyApp est déjà installée" />
    <MediaTemplate EmbedCab="yes" />

    <Icon Id="icon.ico" SourceFile="$(var.InstallFolderPath)\logo.ico"/>

    <Feature Id="ProductFeature" Title="TPI SOFT" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentGroupRef Id="LibrariesComponents" />
      <ComponentGroupRef Id="CustomFonts" />
      <ComponentRef Id="CMP_MenuShortcut" />
      <ComponentRef Id="CMP_DesktopShortcut" />
    </Feature>

    <Property Id="ARPPRODUCTICON"
              Value="icon.ico" />

    <Property Id="ARPCONTACT"
              Value="My Contact"/>

    <PropertyRef Id="NETFRAMEWORK45"/>
    <Condition Message="Ce logiciel requiert l'installation préalable de Microsoft .NET Framework 4.5 ou plus.">
      <![CDATA[Installed OR NETFRAMEWORK45]]>
    </Condition>

    <Condition Message="Ce logiciel tourne sur tous les systèmes Windows à partir de Windows Vista">
      <![CDATA[Installed OR VersionNT >= 600]]>
    </Condition>

    <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />
    <UIRef Id="WixUI_InstallDir" />

    <WixVariable Id="WixUILicenseRtf"
                 Value="$(var.InstallFolderPath)\licence.rtf" />

    <WixVariable Id="WixUIDialogBmp"
                 Value="$(var.InstallFolderPath)\dialog_bmp.bmp"/>

    <WixVariable Id="WixUIBannerBmp"
                 Value="$(var.InstallFolderPath)\top_banner.bmp"/>

    <Property Id="ApplicationFolderName"
              Value="MyApp\MyApp" />

    <Property Id="WixAppFolder"
              Value="WixPerMachineFolder" />

  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="COMPANYFOLDER" Name="My Company">
          <Directory Id="APPLICATIONFOLDER" Name="My App 1.0.0">
          </Directory>
        </Directory>
      </Directory>

      <Directory Id="ProgramMenuFolder">
        <Directory Id="MyStartMenuShortcutDir"
                   Name="My App"/>
      </Directory>

      <Directory Id="DesktopFolder">

      </Directory>

      <Directory Id="FontsFolder">

      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="APPLICATIONFOLDER">
      <Component Id="cmp436C9F728138518252041AF1E09808A9" Guid="PUT-GUID-HERE">
        <File Id="filC9EEE3E54616B953432FF36EDA3020A3" KeyPath="yes" Source="$(var.MyApp.TargetDir)MyApp.exe" />
      </Component>
      <Component Id="cmp840D318334E734AB5C8FA4C807C4CB95" Guid="PUT-GUID-HERE">
        <File Id="filE698BF079DEBA8E2BC7F2E69833E372D" KeyPath="yes" Hidden="yes" Source="$(var.MyApp.TargetDir)MyApp.exe.config" />
      </Component>

      <Component Id="CMP_Licence"
                 Guid="558784B2-E92A-4686-95BD-A034E859E8A7">
        <File Id="licence"
              Source="$(var.InstallFolderPath)\licence.rtf"
              KeyPath="yes" />
      </Component>
    </ComponentGroup>

    <ComponentGroup Id="CustomFonts" Directory="FontsFolder">
      <Component Id="CMP_DigitalFont"
                 Guid="PUT-GUID-HERE">
          <File Id="digitalFont"
                Source="$(var.FontFolderPath)\digital-7.ttf"
                TrueType="yes"
                KeyPath="yes" />
      </Component>
    </ComponentGroup>

    <Component Id="CMP_MenuShortcut"
               Directory="MyStartMenuShortcutDir"
               Guid="PUT-GUID-HERE">

      <Shortcut Id="MenuShortcut"
                Name="MyApp 1.0.0"
                Description="Lance le logiciel MyApp"
                Target="[APPLICATIONFOLDER]MyApp.exe"
                WorkingDirectory="APPLICATIONFOLDER"
                Icon="icon.ico"/>

      <RemoveFolder Id="RemoveMyStartMenuShortcutDir"
                    On="uninstall" />
      <RegistryValue Root="HKCU"
                    Key="Software\MyApp"
                    Name="installed"
                    Type="integer"
                    Value="2"
                    KeyPath="yes" />
    </Component>

    <Component Id="CMP_DesktopShortcut"
               Directory="DesktopFolder"
               Guid="PUT-GUID-HERE">
      <Shortcut Id="DesktopShortcut"
                Name="MyApp 1.0.0"
                Description="Lance le logiciel MyApp"
                Target="[APPLICATIONFOLDER]MyApp.exe"
                WorkingDirectory="APPLICATIONFOLDER"
                Icon="icon.ico"/>
      <RemoveFolder Id="DesktopFolder" On="uninstall"/>
      <RegistryValue
                 Root="HKCU"
                 Key="Software\MyApp"
                 Name="installed"
                 Type="integer"
                 Value="1"
                 KeyPath="yes"/>
    </Component>

  </Fragment>
</Wix>

2 个答案:

答案 0 :(得分:0)

  

更新:问题是过时的配置文件中缺少应用程序参数。换句话说,A configuration issue。通过将调试器附加到启动的应用程序找到。见下文。


日志记录 :您是否在事件查看器中看到了任何线索,或者您的应用程序提供了其他日志记录构造吗?也许您可以通过其配置文件或注册表设置为该应用程序启用调试日志记录

启动问题检查表 :我曾经写过a general-purpose check-list for application launch problems。也许看看,看看是否有东西响起。

  

调试二进制文件-启动序列调试 :您可以在应用程序启动序列和整合中尽早插入消息框   将调试二进制文件放入您的设置中,进行安装,然后附加   在启动时调试到应用程序消息框的调试器   通过启动代码? (设置断点)。

     
      
  • 也许检查一下这个不错的Advanced Installer Video Tutorial for this "attach debugger approach"。它显示了相同的自定义方法   动作代码。启动应用程序的过程相同。   只需附加到消息框并设置断点即可。

  •   
  • 注意:很明显,请记住在知道问题所在后重新编译发行版二进制文件,然后重新测试启动。除错   二进制文件不可重新分发-它们仅绑定到调试dll   由MS SDK安装。普通电脑不会(通常)具有这些   调试dll(使此过程主要与配置问题有关,而不与运行时相关性问题有关)。

  •   

更新的免责声明:

  

免责声明:尽管很明显,但必须提及:切勿在实际发行版中使用调试二进制文件 1) 完全不合法,由于透明性, 2) 并不是一个好主意   调试二进制文件以及对调试二进制文件进行反向工程的可能性,以及 3) 调试运行时二进制文件在非开发人员的设备上将不存在(并且不会尝试静态链接)。最后:它   当您像这样调试时,很容易忘记使用发行版二进制文件进行重建。肯定会发生。


类似的答案 :与其在此重复自己,不如将其链接到之前的一些类似答案。请略读此内容,看看是否能听到铃声:

答案 1 :(得分:0)

在严格遵循Stein的二进制调试指南(这是我第一次以来,花了一些时间完成)之后,我在我的应用程序的执行序列中附加了一个框消息(准确地是在我的应用程序的App类的构造函数中) WPF),然后直接在消息框后面的指令上创建一个断点。然后,我生成了应用程序,重新创建了msi,然后安装了msi。从桌面快捷方式启动可执行文件后,出现消息框。在单击消息框的“确定”按钮之前,我输入了源代码,然后附加了应用程序的进程(“调试”->“附加到进程”)。消息框的验证在Visual Studio上返回给我,我能够逐步执行代码的一部分,直到退回到小平台上为止。