У меня есть приложение C #, работающее на .NET Framework 4.5, развернутое через Microsoft ClickOnce. Я также использую небольшую утилиту из пакета Microsoft SDK под названием DComPerm.exe, которая является приложением C ++, которое мне пришлось компилировать отдельно. Мое основное приложение использует Process.Start()
чтобы получить доступ к этому исполняемому файлу.
Когда я впервые попытался запустить это на клиентском компьютере, я получил сообщение об ошибке, в котором говорилось, что VCRUNTIME140.dll отсутствует, когда приложение пытается вызвать DComPerm.exe.
Это имеет смысл … поскольку эта программа была скомпилирована в C ++, ей нужен распространяемый пакет Visual C ++ 2015, который не был установлен на клиентском компьютере. Я хочу сделать это как можно более безболезненно, поэтому я надеялся, что смогу связать VC ++ 2015 Redist с моим приложением ClickOnce. В свойствах проекта> вкладка «Опубликовать» есть кнопка «Необходимые условия», которая позволяет мне указать, что приложение должно связывать распространяемый пакет.
Это звучит прекрасно в теории, но это не работает. Теперь, когда я пытаюсь установить приложение ClickOnce на клиентском компьютере, оно не работает. Установка завершается неудачно и указывает мне на файл журнала, который содержит следующую соответствующую информацию:
‘RunCheck’ Visual C ++ «14» библиотеки времени выполнения (x86) ‘: требуется установка
Установка компонентов «Visual C ++» 14 «Runtime Libraries (x86)» была принята.
Копирование файлов во временный каталог «C: \ Users \ Владелец \ AppData \ Local \ Temp \ VSD3872.tmp \»
Загрузка файлов в «C: \ Users \ Владелец \ AppData \ Local \ Temp \ VSD3872.tmp \»
(04.08.2016, 12:57:48) Загрузка файла ‘vcredist_x86 \ vcredist_x86.exe’ из ‘http://go.microsoft.com/fwlink/?LinkID=800028&clcid = 0x409‘to’ C: \ Users \ Владелец \ AppData \ Local \ Temp \ VSD3872.tmp \ ‘
Загрузка завершена 04.08.2016, 12:57:49
Загрузка не удалась с HRESULT = -2146697208
И это сообщение ясно дает понять, в чем проблема: ссылка то, что он пытается использовать, чтобы загрузить пакет переадресации, мертв. Только … Я не уверен, как я могу сказать это, чтобы найти правильную ссылку. Я весьма удивлен, что он не может найти его автоматически, поскольку это похоже на ошибку в Visual Studio. Некоторые поиски показали, что правильная ссылка на самом деле этот, но это не то, что решает ClickOnce. Я также увидел, что, установив флажок, это было соответствующее обновление XML для моего файла csproj:
<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86">
<Visible>False</Visible>
<ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
Есть ли какой-нибудь тег XML, который я могу использовать, чтобы явно указать местоположение? Или как еще я могу это исправить? Как я могу связать распространяемый пакет, не ломая мое приложение?
У меня была почти та же проблема. Вы спросили, как указать место загрузки, которое разрешает ClickOnce. Для этого откройте
C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages\vcredist_x86\en\package.xml
и отредактируйте атрибут с помощью Name="https://go.microsoft.com/fwlink/..."
на правильный URL. Кстати, спасибо за то, что нашли правильную ссылку для скачивания, я не смог найти ее, пока не увидел этот пост.
После этого VC ++ Redis правильно установлен на клиентском компьютере.
Других решений пока нет …