Указание распространяемой версии VC++ для необходимого условия ClickOnce

StackOverflow https://stackoverflow.com/questions/122451

Вопрос

Мое приложение ClickOnce использует сторонний инструмент, для которого требуется распространяемый компонент Visual C++ 2005.Сторонний инструмент не будет работать, если установлен только распространяемый пакет VC++ 2008.Однако в Visual Studio 2008 необходимые условия ClickOnce не позволяют указать версию для распространяемого компонента VC++;он добавит необходимое условие VC++ 2008, что имеет смысл в большинстве случаев.Однако в этой ситуации требуется более ранняя версия.ClickOnce требуется, поэтому о модулях слияния не может быть и речи.Есть идеи, как указать версию?

Это было полезно?

Решение

Если вы сможете найти машину с установленным VS 2005, решение не должно быть слишком сложным.У вас есть возможность настроить то, что отображается в диалоговом окне «Предварительные условия» на вкладке «Публикация» вашего проекта.

  1. На машине с установленным VS 2005 перейдите к \Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages и скопируйте vsredist_x86 папку на компьютер, с которого вы публикуете.
  2. Переименуйте папку, назовите ее всредист_х86_2005 или что-то подобное.
  3. Внутри папки отредактируйте \en\package.xml файл.Изменить <String Name="DisplayName"> тег к чему-то, что имеет смысл (Визуальный С++ 2005 Библиотеки времени выполнения (x86)), чтобы отличить его от существующего пакета 2008 года.
  4. Скопируйте папку в C:\Program Files\Microsoft SDK\Windows\v6.0A\Bootstrapper\Packages.
  5. Перезапустите Visual Studio, если она открыта.

Теперь, когда вы откроете диалоговое окно «Предварительные условия», вы увидите новую запись для пакета 2005.Я не полностью тестировал это решение, поэтому, возможно, пропустил некоторые детали, но, надеюсь, это поможет вам начать работу.

Другие советы

Я считаю, что вы можете открыть файл манифеста для своего приложения и изменить версии повторных списков, с которыми должно ссылаться ваше приложение.Списки в манифесте должны соответствовать тем, что у вас есть в каталогах C:\Windows\WinSxS.Eсть Страница проекта кода это дает хорошее описание использования различных распространяемых компонентов.

Я только что установил Visual Studio 2005.Вот оригинальный загрузчик:

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\

\en\package.xml

<?xml version="1.0" encoding="utf-8" ?>

<Package
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  Name="DisplayName"
  Culture="Culture"
>

    <!-- Defines a localizable string table for error messages-->
    <Strings>
        <String Name="DisplayName">Visual C++ Runtime Libraries (x86)</String>
        <String Name="Culture">en</String>
        <String Name="AdminRequired">You do not have the permissions required to install Visual C++ Runtime Libraries (x86). Please contact your administrator.</String>
        <String Name="InvalidPlatformWin9x">Installation of Visual C++ Runtime Libraries (x86) is not supported on Windows 95. Contact your application vendor.</String>
        <String Name="InvalidPlatformWinNT">Installation of Visual C++ Runtime Libraries (x86) is not supported on Windows NT 4.0. Contact your application vendor.</String>
        <String Name="GeneralFailure">A failure occurred attempting to install Visual C++ Runtime Libraries (x86).</String>
    </Strings>

</Package>

\product.xml

<?xml version="1.0" encoding="utf-8" ?> 

<Product
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  ProductCode="Microsoft.Visual.C++.8.0.x86"
>

  <!-- Defines list of files to be copied on build -->
  <PackageFiles>
    <PackageFile Name="vcredist_x86.exe"/>
  </PackageFiles>

  <InstallChecks>
    <MsiProductCheck Property="VCRedistInstalled" Product="{A49F249F-0C91-497F-86DF-B2585E8E76B7}"/>
  </InstallChecks>

  <!-- Defines how to invoke the setup for the Visual C++ 8.0 redist -->
  <!-- TODO: Needs EstrimatedTempSpace, LogFile, and an update of EstimatedDiskSpace -->
  <Commands Reboot="Defer">
    <Command PackageFile="vcredist_x86.exe" 
         Arguments=' /q:a ' 
         >

      <!-- These checks determine whether the package is to be installed -->
      <InstallConditions>
        <BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
        <!-- Block install if user does not have admin privileges -->
        <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>

        <!-- Block install on Win95 -->
        <FailIf Property="Version9X" Compare="VersionLessThan" Value="4.10" String="InvalidPlatformWin9x"/>

        <!-- Block install on NT 4 or less -->
        <FailIf Property="VersionNT" Compare="VersionLessThan" Value="5.00" String="InvalidPlatformWinNT"/>

      </InstallConditions>

      <ExitCodes>
        <ExitCode Value="0" Result="Success"/>
        <ExitCode Value="3010" Result="SuccessReboot"/>
        <DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
      </ExitCodes>

    </Command>
  </Commands>
</Product>

\vcredist_x86.exe

SHA1: 95040f80b0d203e1abaec4e06e0ec0e01c507d03
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top