1

在应用程序中,32 位或 64 位没有单独的依赖项。这是一个常见的 WPF 应用程序,我没有使用任何第三方 .dll。如果我拉出发布文件夹文件并在 Win 8.1 64 位上运行它,它就可以工作。当我在安装后尝试运行应用程序时,the application is not launching , no error message and even i tried to launch it from command prompt..no error message.

我正在使用 Wix 3.8 来制作安装程序。

以下是我这样做的步骤:VS 2012 配置管理器:调试: 在此处输入图像描述

发布: 在此处输入图像描述

PrintUtility is the exe of the applicaiton.

PrintUtilityExe is the BootStrapper of WIX.

SetupProjectInstaller is the .msi installer of WIX.

当我通过 WIX: 制作安装程序SetupProjectInstaller.msi并将其安装在 Win 64 位 8.1 上时,应用程序没有启动。

这是wix代码:Product.wxs

<?xml version="1.0"?>
<?define ProductVersion = "1.0.0.0"?>
<?define ProductUpgradeCode = "9fe100b5-8486-46c4-b3ab-15da1931ba4d"?>
<?define SourceDir = "C:\Users\krangaraj\Documents\Visual Studio 2012\Projects\TestPrintUtility\TestPrintUtility\bin\x86\Release" ?>
<?define SourceDirImages = "C:\Users\krangaraj\Documents\Visual Studio 2012\Projects\TestPrintUtility\TestPrintUtility\bin\x86\Release\Res" ?>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)"
           Name="TestPrint Utility" Version="$(var.ProductVersion)" Manufacturer="TTT" Language="1033" >
    <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package" InstallScope="perMachine"/>
    <Media Id="1" Cabinet="TestPrintUtility.cab" EmbedCab="yes"/>
    <Icon Id="ProductIcon" SourceFile="TestPrintInstaller.ico"/>
    <Icon Id="TestPrintInstaller.ico" SourceFile="TestPrintInstaller.ico"/>
    <Property Id="ARPPRODUCTICON" Value="TestPrintInstaller.ico" />
    <Upgrade Id="$(var.ProductUpgradeCode)">
      <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
      <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="no"
                      Property="OLDERVERSIONBEINGUPGRADED"/>
    </Upgrade>
    <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition>

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLDIR" Name="TestPrint Utility">

          <Component Id="TestPrintUtility" Guid="{47D7C69E-81C2-4FD6-B77B-790FBF5F7B39}">
            <File Id="TestPrintUtility.exe" Source="$(var.SourceDir)\TestPrintUtility.exe" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="bGround.png" Guid="{64AE1DAD-2502-4171-AF80-A153D59D8996}">
            <File Id="bGround.png" Source="$(var.SourceDir)\bGround.png" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="cspstat.dll" Guid="{69CAD367-A9D1-46E7-B8BA-CF839D034175}">
            <File Id="cspstat.dll" Source="$(var.SourceDir)\cspstat.dll" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="TTT.I18N.dll" Guid="{B20D2708-0422-4617-815F-C9143A75833F}">
            <File Id="TTT.I18N.dll" Source="$(var.SourceDir)\TTT.I18N.dll" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="TTTDongleManage.dll" Guid="{B4A38CE6-C34E-4391-9DCA-A142DB3BCA66}">
            <File Id="TTTDongleManage.dll" Source="$(var.SourceDir)\TTTDongleManage.dll" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="HtmlAgilityPack.dll" Guid="{D63578BD-902A-4899-A0BF-C82146117B03}">
            <File Id="HtmlAgilityPack.dll" Source="$(var.SourceDir)\HtmlAgilityPack.dll" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="HtmlAgilityPack.pdb" Guid="{8CD7A15D-C92E-4F41-A097-8A06CFB01774}">
            <File Id="HtmlAgilityPack.pdb" Source="$(var.SourceDir)\HtmlAgilityPack.pdb" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="HtmlAgilityPack.xml" Guid="{95B2ABCB-3E8C-4824-850C-7C3D29FB814D}">
            <File Id="HtmlAgilityPack.xml" Source="$(var.SourceDir)\HtmlAgilityPack.xml" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="KGDLLV10.dll" Guid="{AB144098-3E3E-42AD-94A4-ED8F40E93915}">
            <File Id="KGDLLV10.dll" Source="$(var.SourceDir)\KGDLLV10.dll" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="Microsoft.Expression.Interactions.dll" Guid="{1EEF5A4C-B0AF-4528-8F57-80A8A62743EB}">
            <File Id="Microsoft.Expression.Interactions.dll" Source="$(var.SourceDir)\Microsoft.Expression.Interactions.dll" KeyPath="yes" Checksum="yes"/>
          </Component>
          <Component Id="Microsoft.Expression.Interactions.xml" Guid="{8D772282-693B-4B4F-8D50-BC0A74F694E1}">
            <File Id="Microsoft.Expression.Interactions.xml" Source="$(var.SourceDir)\Microsoft.Expression.Interactions.xml" KeyPath="yes" Checksum="yes"/>
          </Component>

            </Directory>


      </Directory>

      <Directory Id="ProgramMenuFolder">
        <Directory Id="ProgramMenuSubfolder" Name="TestPrint Utility">
          <Component Id="ApplicationShortcuts" Guid="12345678-1234-1234-1234-333333333333">
            <Shortcut Id="ApplicationShortcut1" Name="TestPrint Utility" Description="TestPrint Utility"
                      Target="[INSTALLDIR]TestPrintUtility.exe" WorkingDirectory="INSTALLDIR"/>

            <RegistryValue Root="HKCU" Key="Software\TTT PIE\TestPrintUtility"
                      Name="installed" Type="integer" Value="1" KeyPath="yes"/>
            <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/>
          </Component>

        </Directory>
      </Directory>

      <Directory Id="DesktopFolder" Name="Desktop">
        <Component Id="ApplicationShortcutDesktop" Guid="{C80E4373-F31A-4A2E-90A5-F3E2EFD149AA}">
          <Shortcut Id="ApplicationDesktopShortcut"
             Name="TestPrint Utility"
             Description="TestPrint Utility"
             Target="[INSTALLDIR]TestPrintUtility.exe"
             WorkingDirectory="INSTALLDIR"/>
          <RemoveFolder Id="DesktopFolder" On="uninstall"/>
          <RegistryValue
            Root="HKCU"
            Key="Software/MyAppName"
            Name="installed"
            Type="integer"
            Value="1"
            KeyPath="yes"/>
        </Component>
      </Directory>


    </Directory>


    <InstallExecuteSequence>
      <RemoveExistingProducts After="InstallValidate"/>

    </InstallExecuteSequence>

    <Feature Id="DefaultFeature" Level="1">
      <ComponentRef Id="TestPrintUtility"/>
      <ComponentRef Id="bGround.png"/>
      <ComponentRef Id="cspstat.dll"/>
      <ComponentRef Id="TTT.I18N.dll"/>
      <ComponentRef Id="TTTDongleManage.dll"/>
      <ComponentRef Id="HtmlAgilityPack.dll"/>
      <ComponentRef Id="HtmlAgilityPack.pdb"/>
      <ComponentRef Id="HtmlAgilityPack.xml"/>
      <ComponentRef Id="KGDLLV10.dll"/>
      <ComponentRef Id="Microsoft.Expression.Interactions.dll"/>
      <ComponentRef Id="Microsoft.Expression.Interactions.xml"/>



    </Feature>


  </Product>
</Wix>

笔记:To minimize it i removed some part of comportment code from the above lines

然后我使用这个最终的代码来制作最终的.msi:

set WIX_BIN=C:\Program Files\WiX Toolset v3.8\bin\
echo Wix Toolset Bin Path: %WIX_BIN%
"%WIX_BIN%candle.exe" Product.wxs -ext WixUtilExtension
if exist Product.wixobj ("%WIX_BIN%light.exe" -out Product.msi Product.wixobj -ext WixUIExtension -ext WixUtilExtension)

这是SetupProjectInstaller.wixproj代码:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProductVersion>3.8</ProductVersion>
    <ProjectGuid>f5d8db53-64db-41d7-9cf9-fb9a151fd45b</ProjectGuid>
    <SchemaVersion>2.0</SchemaVersion>
    <OutputName>SetupProjectInstaller</OutputName>
    <OutputType>Package</OutputType>
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <OutputPath>bin\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
    <DefineConstants>Debug</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <OutputPath>bin\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="Product.wxs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Utility\.Design\.Design.csproj">
      <Name>.Design</Name>
      <Project>{58a00d29-5dc5-4b9e-a18d-6fe6d1f0c1cf}</Project>
      <Private>True</Private>
      <DoNotHarvest>True</DoNotHarvest>
      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
      <RefTargetDir>INSTALLFOLDER</RefTargetDir>
    </ProjectReference>
    <ProjectReference Include="..\Utility\Utility.csproj">
      <Name>Utility</Name>
      <Project>{7316ff68-d2ba-4b9a-8d92-15e93ac7bc4e}</Project>
      <Private>True</Private>
      <DoNotHarvest>True</DoNotHarvest>
      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
      <RefTargetDir>INSTALLFOLDER</RefTargetDir>
    </ProjectReference>
    <ProjectReference Include="..\Utility\WPFSpark\WPFSpark.csproj">
      <Name>WPFSpark</Name>
      <Project>{98be1309-ceb4-45ee-b4ad-28baf0570fab}</Project>
      <Private>True</Private>
      <DoNotHarvest>True</DoNotHarvest>
      <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
      <RefTargetDir>INSTALLFOLDER</RefTargetDir>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(WixTargetsPath)" />
  <!--
    To modify your build process, add your task inside one of the targets below and uncomment it.
    Other similar extension points exist, see Wix.targets.
    <Target Name="BeforeBuild">
    </Target>
    <Target Name="AfterBuild">
    </Target>
    -->
</Project>

请帮助我如何使它在 Win 64 位操作系统上工作。非常感谢。

SS:![在此处输入图像描述][3]

![在此处输入图像描述][4] ![在此处输入图像描述][5]

编辑:

最后,我将我的项目移至 Windows 8 OS 64 位上的 VS2012。当我在 VS 中启动项目时,它工作正常。

据我了解,我在配置方面和 WIX 方面都犯了一些错误。任何帮助的家伙??? Note: The application can be installed on Win 32 without any problem.

4

1 回答 1

0

当您创建 32 位 MSI(编译为 x86)然后尝试将其安装在 64 位操作系统上时,注册表项将被写入 WOW64 配置单元(HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft)。在查找自定义注册表项时,64 位版本的 Windows 会查找 64 位注册表配置单元,而不是 WOW64 注册表配置单元。在您的 WIX 脚本中,我看到有几个注册表项已设置,可能会进入 WOW64 配置单元,这可能是您的应用程序无法正常运行的可能原因。一种解决方案是在 x86 和 x64 中构建 MSI,如果它最终部署到 32 位和 64 位操作系统。

于 2014-03-19T14:08:18.790 回答