Как загрузить распространяемый компонент C++ 2010 с помощью приложения C++/CLI ClickOnce?

У меня есть старое приложение C++, в которое я недавно добавил поддержку CLR. Это было сделано для того, чтобы я мог использовать mage.exe для создания файлов манифеста, необходимых для создания приложения как приложения ClickOnce. После некоторой разочаровывающей работы я смог создать файлы манифеста.

Теперь я хочу создать файл setup.exe, аналогичный тому, что вы получите, если воспользуетесь опцией публикации в проекте C#. Файл будет проверять наличие необходимых компонентов .NET Framework 4.0, установщика Windows 3.1 и распространяемого компонента Visual C++ 2010 x86 и при необходимости устанавливать их.

Я пытался использовать генератор манифестов Bootstrapper, но я не уверен, как заставить его проверять и устанавливать все 3 предварительных условия и запускать файл ClickOnce .application, который у меня есть. Документация по продукту немного фрагментарна.

Я также безуспешно пытался использовать msbuild /target:publish, чтобы имитировать опцию публикации, которую вы увидите в проекте C#.

Я даже пытался отредактировать файл .vcxproj, включив в него BootstrapperFile (как показано здесь: http://msdn.microsoft.com/en-us/library/ms164294.aspx и CustomAction завершается успешно на компьютере разработки, завершается ошибкой на компьютере развертывания) безрезультатно.

Можно ли добавить некоторую зависимость в манифест моего приложения (myapp.exe.manifest), аналогичную тому, как CLR устанавливается в качестве предварительного требования?

<dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
          <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" version="4.0.30319.0" />
</dependentAssembly>
</dependency>

Итак, может ли кто-нибудь дать какие-либо рекомендации относительно того, как я могу создать установочный пакет, который проверяет наличие предварительных условий, упомянутых выше, при необходимости устанавливает, а затем запускает мой файл ClickOnce .application? Я думаю, что сложность здесь в том, что это приложение C++ CLI Clickonce, и нет поддержки IDE для создания пакета установки.


person iCode    schedule 22.08.2012    source источник
comment
Создание приложений CO из кода C++/CLI было традиционно невозможно из-за зависимости от CRT. Таким образом, вы не найдете много помощи вокруг об этом. У вас снова есть шанс с VS2010, он больше не использует CRT в параллельном кеше. Вам также потребуется развернуть как минимум msvcr100.dll.   -  person Hans Passant    schedule 22.08.2012
comment
О, хорошо, это по крайней мере многообещающе. Я добавил проект «Настройка и развертывание», чтобы посмотреть, что он обнаружил в качестве обнаруженных зависимостей. Он показал Microsoft_VC100_CRT_x86.msm и Microsoft_VC100_MFC_x86.msm, а затем упаковал msvcp100.dll, mfc100u.dll, mfc100.dll, mfcm100.dll, mfcm100u.dll и msvcr100.dll. Как вы думаете, было бы плохой идеей включать их в виде файлов, скопированных на клиентский компьютер с помощью ClickOnce (файлы .deploy)?   -  person iCode    schedule 22.08.2012
comment
Вы должны развернуть их, без них программа не заработает.   -  person Hans Passant    schedule 22.08.2012
comment
Я понимаю, что мне придется их развернуть. Мне просто интересно, правильно ли устанавливать их в то же место, что и исполняемый файл, в качестве файловых зависимостей ClickOnce. Обновление: я установил dll в исполняемый каталог на машине без распространяемого C++, и вуаля, все заработало! Просто интересно, как exe знает, чтобы найти там эти dll и использовать их? Я полагаю, он проверяет исполняемый каталог, а затем системные каталоги, если их там нет?   -  person iCode    schedule 22.08.2012