Можно ли использовать сборку. NET Framework 4.7+ с MSI в качестве встроенного интерфейса? - PullRequest
0 голосов
/ 10 марта 2020

Я создаю приложение Windows и использую MSI (через WIX и Wix #) для моего установщика.

Я создал встроенный пользовательский интерфейс на основе WPF, который вызывается вместо стандартного пользовательского интерфейса MSI.

Все работает нормально, пока я придерживаюсь. NET Framework 3.5 или ниже возможностей. Но если я модернизирую свой проект, чтобы использовать что-то более 3,5, я получаю такие ошибки:

enter image description here

Возможно ли вообще использовать. NET Сборка Framework 4.7+ с MSI в качестве встроенного интерфейса? Если да, то как мне правильно настроить мой проект, чтобы сделать это?

Обратите внимание, что основная причина, по которой я хочу использовать более новую версию (помимо возможности использовать приятные вещи в более поздних версиях), заключается в том, чтобы пользовательский интерфейс выглядел правильно на Windows 10. Прямо сейчас мой пользовательский интерфейс имеет вид Windows 7:

enter image description here

Возможно, я здесь не тот лай, и может быть способ заставить мою сборку WPF на основе. NET 3.5 делать правильные вещи относительно визуальных стилей в Windows 10, подобно тому, как это можно сделать в WinForms, например:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

1 Ответ

0 голосов
/ 16 марта 2020

Да, это возможно. Вот как это сделать.

Во-первых, вам нужно .config файл для WIX #, который определяет supportedRuntime и устанавливает useLegacyV2RuntimeActivationPolicy="true".

CustomAction.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true" >
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
    </startup>
</configuration>

Во-вторых, в вашем приложении Wix # (например, setup.cs) используйте WixProject.CAConfigFile, чтобы указать на этот .config файл:

     project.CAConfigFile = "CustomAction.config";
     project.BuildMsi();

Обратите внимание, что вы должны внимательно рассмотреть, что . NET Framework, который требуется для вашего встроенного интерфейса WIX. Например, Windows 10 гарантированно имеет как минимум. NET Framework 4.6. Если вы укажете что-то большее, вам нужно будет либо установить его как часть вашего установщика, либо попросить пользователей сделать это.

Та-да: enter image description here

...