Предварительное условие для пересылки пакета Visual C++ 14 - настройка из программы установки Visual Studio
У меня есть проект установки Visual Studio, который устанавливает программу x64, которая нуждается в пакете Redist VC++ 14.
Я выбрал параметры согласно изображению и создал структуру папок внутри:
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&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++ Redistributable для Visual Studio 2015).
Любой из вариантов подходит для меня (загрузка с веб-сайта или загрузка из того же места, что и мое приложение), если установлено предварительное условие.
2 ответа
Для 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 SDKs\ClickOnce Bootstrapper\Packages\vc_redistx64\".
Перестройте проект, теперь он работает нормально
Есть открытая проблема с MS.
Вот ссылка на распространяемые пакеты 2015 года. https://www.microsoft.com/en-us/download/details.aspx?id=48145