Необходимое условие для повторного распространения пакета Visual C++ 14 — настройка из проекта установки Visual Studio

У меня есть проект установки Visual Studio, который устанавливает программу x64, для которой требуется пакет VC++ 14 Redist.

Настройте внешний вид

Я выбрал параметры в соответствии с изображением и создал структуру папок внутри:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages

Я создал папку vcredist_x64, которая содержит:

vcredist_x64.exe
product.xml
en folder

Внутри папки у меня есть:

package.xml

Содержимое product.xml:

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

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

  <!-- Defines list of files to be copied on build -->
  <PackageFiles>
  <PackageFile Name="vcredist_x64.exe" HomeSite="VCRedistExe"/>
  </PackageFiles>
  <InstallChecks>
    <MsiProductCheck Property="VCRedistInstalled" Product="{e46eca4f-393b-40df-9f49-076faf788d83}"/>
   </InstallChecks>

   <!-- Defines how to invoke the setup for the Visual C++ 11.0 redist -->
   <!-- TODO: Needs EstimatedTempSpace, LogFile, and an update of EstimatedDiskSpace -->
    <Commands Reboot="Defer">
    <Command PackageFile="vcredist_x64.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 any platform other than x64 -->
    <FailIf Property="ProcessorArchitecture" Value="AMD64" Compare="ValueNotEqualTo" String="InvalidOS"/>

    <!-- Block install on Vista or below -->
    <FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.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>

Содержимое 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++ "14" Runtime Libraries (x64)</String>
        <String Name="Culture">en</String>
        <String Name="AdminRequired">You do not have the permissions required to install Visual C++  Runtime Libraries (x64). Please contact your administrator.</String>
        <String Name="InvalidOS">Installation of Visual C++  Runtime Libraries (x64) is supported only on x64 machines.</String>
        <String Name="GeneralFailure">A failure occurred attempting to install Visual C++  Runtime Libraries (x64).</String>
          <String Name="VCRedistExe">http://go.microsoft.com/fwlink/?LinkID=210622&amp;clcid=0x409</String>
     </Strings>

    </Package>

Когда я создаю проект установки, он не дает ошибок.

Первоначально, когда у меня не было этой структуры папок вместе с xmls, у меня была ошибка при сборке:

enable 'Download prerequisites from the same location as my application'   in the Prerequisites dialog box, you must download file 'vcredist_x64\vcredist_x64.exe' for item 'Visual C++ "14" Runtime Libraries (x64)' to your local machine. For more information, see http://go.microsoft.com/fwlink/?LinkId=616018.

Однако сейчас у меня нет ошибок. Проблема в том, что он не устанавливает распространяемую зависимость VC.

Я считаю, что код продукта и другие параметры в xmls неверны. Также ссылка VCRedistExe предназначена для VC++2010, но она ничего не загружает во время установки. Однако обратите внимание, что у меня есть vcredist_x64.exe внутри структуры папок, которая является редистентом VC++14.

Пожалуйста, помогите мне, так как я пробовал много других вариантов, и этот «официальный» вариант, похоже, не работает (я не смог найти соответствующую информацию о распространяемом Visual C++ для Visual Studio 2015).

Мне подходит любой вариант (загрузка с веб-сайта или загрузка из того же места, что и мое приложение), если установлено необходимое условие.


person florinp    schedule 11.06.2016    source источник
comment
Использование Visual Studio 2015 в Windows 8.   -  person florinp    schedule 11.06.2016


Ответы (2)


Есть открытая проблема с MS.

https://connect.microsoft.com/VisualStudio/feedback/details/1604832/vcredist-bootstrapper-packages-in-vs-2015-sdk-arent-working

Вот ссылка на распространяемые пакеты 2015 года. https://www.microsoft.com/en-us/download/details.aspx?id=48145

person Derek Smalls    schedule 08.09.2016

Для 32-разрядной операционной системы проверьте этот раздел реестра, используя regedit HKLM\Software\Microsoft\GenericBootstrapper\

Для 64-битной ОС HKLM\Software\Wow6432Node\Microsoft\GenericBootstrapper

Значение пути — это место, где вам нужно разместить распространяемые файлы.

Например, если вы хотите разместить распространяемый 64-битный VC++ (vc_redist.x64.exe)..

если расположение "C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\" в значении пути,

поместите файл vc_redist.x64.exe в "C:\Program Files (x86)\Microsoft SDK\ClickOnce Bootstrapper\Packages\vc_redistx64\".

Пересоберите проект, теперь он работает нормально

person Karthikeyan Subramanian    schedule 17.07.2018