Bootstrapper,Sync Framework 2.1 - 先决条件

时间:2014-08-15 17:20:33

标签: c# visual-studio-2013 microsoft-sync-framework bootstrapper prerequisites

编辑:经过更多搜索,我找到了完成此操作的方法。 我用This preview page来改变我的Product.xml 然后我复制了一些现有的Product.xml来检查它是否已经安装。

所以我在我的系统和C#应用程序中成功实现了Sync Framework 2.1。但是,当我发布它并在未安装Sync Framework的另一台PC上进行测试时,会出现错误 所以我尝试在安装时包含SyncSDK-v2.1-x86-ENU.msi。

搜索后我发现我需要将它添加到先决条件列表中(项目 - >属性 - >发布 - >先决条件)

我尝试过关于此Creating Custom Packages的链接。但它仍然指向不再存在的BMG(Bootstrapper Manifest Generator)文件。

下一个解决方案是手动创建它,我想我是在正确的道路上但是无法完成它。我做了什么:

  • 下载dotNetFx45_Full_x86_x64.exe并将其放入:C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.1A \ Bootstrapper \ Packages \ DotNetFX45
  • 在C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.1A \ Bootstrapper \ Packages \
  • 中创建了一个名为SyncFrame的新文件夹
  • 添加了Product.xml并将SyncSDK-v2.1-x86-ENU.msi复制到SyncFrame文件夹。还添加了一个子文件夹“en”,在那里创建了一个Package.xml和一个Eula.rtf文件。
  • 在VS2013中,项目 - >属性 - >发布 - >先决条件我选择“从与我的应用程序相同的位置下载先决条件”。
  • 发布后,它会成功将“dotnetfx45”文件夹添加到包含.exe文件的已发布文件夹中。这是因为我在先决条件选择框中检查了“Microsoft .NET Framework 4.5(x86和x64)。”

但是我仍然无法将Sync Framework 2.1纳入先决条件选择框。

这是我的(可能是垃圾)Product.xml: 编辑:现在是修复我的问题的Product.xml:

 <?xml version="1.0" encoding="utf-8" ?>
<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
 ProductCode="Microsoft.Sample.EULA">
 <!-- Defines the list of files to be copied on build. -->
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="SyncSDK-v2.1-x86-ENU.msi"/>
 </PackageFiles>

<InstallChecks>
  <MsiProductCheck Product="IsMsiInstalled"
   Property="{{4A3EAF2F-F950-4BF2-B0C7-857E0E970E5A}}"/>
 </InstallChecks>

<!-- Defines how to run the Setup package.-->
 <Commands >
  <Command PackageFile = "SyncSDK-v2.1-x86-ENU.msi" Arguments=''>
   <InstallConditions>
    <BypassIf Property="IsMsiInstalled"
      Compare="ValueGreaterThan" Value="0"/>
    <FailIf Property="AdminUser"
      Compare="ValueNotEqualTo" Value="True"
     String="NotAnAdmin"/>
  </InstallConditions>
  <ExitCodes>
    <ExitCode Value="0" Result="Success" />
    <ExitCode Value="-1" Result="Fail" String="AU_Unaccepted" />
    <DefaultExitCode Result="Fail" 
      FormatMessageFromSystem="true" String="GeneralFailure" />
  </ExitCodes>
  </Command>
</Commands>

我用How to create Product Manifest来制作这个......

这是我的Package.xml

<?xml version="1.0" encoding="utf-8" ?>
<Package
 xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
 Name="DisplayName"
 Culture="Culture"
  LicenseAgreement="Eula.rtf">

  <PackageFiles>
<PackageFile Name="Eula.rtf"/>
 </PackageFiles>

  <Strings>
<String Name="DisplayName">Sync Framework 2.1</String>
<String Name="Culture">en</String>
<String Name="NotAnAdmin">You must be an administrator to install this package.       </String>
  <String Name="GeneralFailure">
  A general error has occurred while
  installing this package.
   </String>
  </Strings>
 </Package>

一个小问题,但目前根本没有问题,我也使用SQL数据库,本地包含在项目和在线数据库中,我是否需要在先决条件选择框中选择更多先决条件。喜欢SQL server express 2012 localDB? 修改:

这样可行,但我仍然想创建一个product.xml,以便自动从网站下载而不是将其放在安装文件夹中。它使安装文件夹对于小应用程序来说很大。

2 个答案:

答案 0 :(得分:2)

最后,我基于bootstrappers for sync framework 2.0

完成了引导程序

这里分别是包和产品xml:

SyncFX20Core的产品文件夹(x64)

<?xml version="1.0" encoding="UTF-8"?>
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="SyncFX20Core(x64)"/>

SyncFX20Core(x64)的package.xml

<?xml version="1.0" encoding="utf-8"?>
<Package Name="DisplayName" LicenseAgreement="synchronizationeula_english.rtf" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <PackageFiles CopyAllPackageFiles="false">
    <PackageFile Name="synchronizationeula_english.rtf" />
    <PackageFile Name="Synchronization-v2.1-x64-ENU.msi" HomeSite="SyncFX21_64" PublicKey="3082010A0282010100BD72B489E71C9F85C774B8605C03363D9CFD997A9A294622B0A78753EDEE463AC75B050B57A8B7CA05CCD34C77477085B3E5CBDF67E7A3FD742793679FD78A034430C6F7C9BAC93A1D0856444F17080DF9B41968AA241CFB055785E9C54E072137A7EBCE2C2FB642CD2105A7D6E6D32857C71B7ACE293607CD9E55CCBBF122EBA823A40D29C2FBD0C35A3E633DC72C490B7B7985F088EF71BD435AE3A3B30DF355FB25E0E220D3E79A5E94A5332D287F571B556A0C3244EF666C6FF0389CEF02AD9AA1DD9807100E3C1869E2794E4614E0B98CD0756D9CAC009C2D42F551B85AF4784583E92E7C2BBB5DCD196128AD94430AC56A42FFB532AEA42922DE16E8D30203010001" />
  </PackageFiles>
  <Commands Reboot="Defer">
    <Command PackageFile="Synchronization-v2.1-x64-ENU.msi" Arguments="/quiet" EstimatedInstallSeconds="80" EstimatedTempBytes="20000000">
      <ExitCodes>
        <ExitCode Value="0" Result="Success" />
        <ExitCode Value="112" Result="Fail" String="DiskFull" />
        <DefaultExitCode Result="Fail" String="Anunexpectedexitcodewasr" FormatMessageFromSystem="true" />
      </ExitCodes>
    </Command>
  </Commands>
  <Strings>
    <String Name="Culture">en</String>
    <String Name="DisplayName">SyncFX21Core (x64)</String>
    <String Name="SyncFX21_64">http://download.microsoft.com/download/E/1/E/E1E636E6-AA5C-4052-9927-D722312DB564/Synchronization-v2.1-x64-ENU.msi</String>
    <String Name="DiskFull">DiskFull</String>
    <String Name="Anunexpectedexitcodewasr">An unexpected exit code was returned from the installer. The installation failed.</String>
  </Strings>
</Package>

SyncFX20DatabaseProviders的产品文件夹(x64)

<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="SyncFX20DatabaseProviders(x64)" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <RelatedProducts>
    <DependsOnProduct Code="SyncFX20Core(x64)" />
  </RelatedProducts>
</Product>
用于SyncFX20DatabaseProviders(x64)的

<?xml version="1.0" encoding="utf-8"?>
<Package Name="DisplayName" LicenseAgreement="databaseproviderseula_english.rtf" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <PackageFiles CopyAllPackageFiles="false">
    <PackageFile Name="databaseproviderseula_english.rtf" />
    <PackageFile Name="DatabaseProviders-v3.1-x64-ENU.msi" HomeSite="SyncFX21DatabaseProviders_64" PublicKey="3082010A0282010100BD72B489E71C9F85C774B8605C03363D9CFD997A9A294622B0A78753EDEE463AC75B050B57A8B7CA05CCD34C77477085B3E5CBDF67E7A3FD742793679FD78A034430C6F7C9BAC93A1D0856444F17080DF9B41968AA241CFB055785E9C54E072137A7EBCE2C2FB642CD2105A7D6E6D32857C71B7ACE293607CD9E55CCBBF122EBA823A40D29C2FBD0C35A3E633DC72C490B7B7985F088EF71BD435AE3A3B30DF355FB25E0E220D3E79A5E94A5332D287F571B556A0C3244EF666C6FF0389CEF02AD9AA1DD9807100E3C1869E2794E4614E0B98CD0756D9CAC009C2D42F551B85AF4784583E92E7C2BBB5DCD196128AD94430AC56A42FFB532AEA42922DE16E8D30203010001" />
  </PackageFiles>
  <Commands Reboot="Defer">
    <Command PackageFile="DatabaseProviders-v3.1-x64-ENU.msi" Arguments="/quiet" EstimatedInstallSeconds="80" EstimatedTempBytes="20000000">
      <ExitCodes>
        <ExitCode Value="0" Result="Success" />
        <ExitCode Value="112" Result="Fail" String="DiskFull" />
        <DefaultExitCode Result="Fail" String="Anunexpectedexitcodewasr" FormatMessageFromSystem="true" />
      </ExitCodes>
    </Command>
  </Commands>
  <Strings>
    <String Name="Culture">en</String>
    <String Name="DisplayName">SyncFX21DatabaseProviders (x64)</String>
    <String Name="SyncFX21DatabaseProviders_64">http://download.microsoft.com/download/E/1/E/E1E636E6-AA5C-4052-9927-D722312DB564/DatabaseProviders-v3.1-x64-ENU.msi</String>
    <String Name="DiskFull">DiskFull</String>
    <String Name="Anunexpectedexitcodewasr">An unexpected exit code was returned from the installer. The installation failed.</String>
  </Strings>
</Package>

如果您需要更多详细信息或源文件,请随时与我联系... ameser@gmail.com

干杯!

答案 1 :(得分:0)

xml for x86 version with Installed check:

<?xml version="1.0" encoding="UTF-8"?>
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="SyncFX21Core (x86)" >
    <PackageFiles CopyAllPackageFiles="false">
        <PackageFile Name="synchronization-v2.1-x86-enu.msi" PublicKey="3082010A0282010100BD3089FB4572A8536B9E894F0023C0BED41D3DB1594038F373918226E696120053D91C820E3CCE1DBBBDF7428D97D4FC381AE4B9F9E3ECD36103BFA0D3D6754D5C46A9ED5EF0D2E2695B1A73EAB31C8D04CD2944A064592F1E985D6EC7AB18398265C4A7BCAB758819EA87971426B37F2676A4D4383984E3B326D518F92BE9D2C9165A5421F2978D878629FEF4492CE68BF8043F7DCDCD9692860D7103E2D0FE0C4235FFD7B83FDD8E450A7DF6D74BAD5BF076721D77237D8935C41C5DB250034B476D07A75588980680A681AD544ED881D6FABF42C031BE550D99D553491230EBE5A5887C5EC47A5A148708B43769A0EB32248C08EBF9D414BAE0FCCDEAA4150203010001" />
    </PackageFiles>

    <InstallChecks>
        <RegistryCheck Property="Installed" Key="HKLM\SOFTWARE\Microsoft\Microsoft Sync Framework\v2.1\Setup\SynchronizationX86" Value="Install"/>
    </InstallChecks>

    <Commands>
        <Command PackageFile="synchronization-v2.1-x86-enu.msi" Arguments="/quiet" EstimatedInstallSeconds="80" EstimatedTempBytes="20000000">
            <InstallConditions>
                <BypassIf Property="Installed" Compare="ValueEqualTo" Value="1" />
                <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired" />
            </InstallConditions>
            <ExitCodes>
                <ExitCode Value="0" Result="Success" />
                <ExitCode Value="112" Result="Fail" String="DiskFull" />
                <DefaultExitCode Result="Fail" String="Anunexpectedexitcodewasr" FormatMessageFromSystem="true" />
            </ExitCodes>
        </Command>
    </Commands>
    <Strings>
        <String Name="DiskFull">DiskFull</String>
        <String Name="AdminRequired">Administrator permissions are required to install Sync Framework 2.1. Contact your administrator.</String>    
        <String Name="Anunexpectedexitcodewasr">An unexpected exit code was returned from the installer. The installation failed.</String>
    </Strings>
</Product>
相关问题