Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как решить проблему отображения WinForms на старых версиях Windows через Inno Setup

Delphi , Файловая система , DLL и PlugIns

Пользователи, сталкивающиеся с разработкой установщиков с помощью Inno Setup, иногда сталкиваются с трудностями совместимости с более старыми версиями Windows. В частности, при использовании WinForms для создания сложных окон, которые не могут быть реализованы непосредственно в Inno Setup, может возникнуть проблема с отображением шрифтов. В данной статье мы рассмотрим, как можно решить проблему отображения WinForms на старых версиях Windows, используя Inno Setup, на примере System.ArgumentException: Font '?' cannot be found.

Описание проблемы

Проблема заключается в том, что при попытке запуска установщика, созданного с использованием Inno Setup и WinForms, на компьютерах с Windows Server 2008R2, пользователи могут столкнуться с ошибкой, связанной с не найденным шрифтом. Это происходит, несмотря на то, что на более новых версиях Windows (Windows 10, Windows Server 2012 и 2016) установщик работает корректно.

Пример кода

Вот пример скрипта Inno Setup, который пытается открыть WinForms окно:

#define MyAppName "InnoTest"
#define MyAppVersion "1.0"
#define MyAppPublisher "Test"
#define MyAppURL "http://inno.test"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
// ... другие параметры ...

[Files]
Source: "C:\Users\Admin\Documents\Visual Studio 2017\Projects\InnoTestNet\InnoTestNet\bin\Release\InnoTestNet.dll"; DestDir: "{tmp}"; Flags: dontcopy

[Code]
procedure ShowTestForm(); external 'ShowTestForm@files:InnoTestNet.dll stdcall';

procedure InitializeWizard();
begin
  ShowTestForm();
end;

И пример кода на C#, использующего UnmanagedExports для экспорта метода ShowTestForm:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using RGiesecke.DllExport;

namespace InnoTestNet
{
    public class InnoTestNet
    {
        [DllExport("ShowTestForm", CallingConvention = CallingConvention.StdCall)]
        public static void ShowTestForm()
        {
            // ... код для отображения окна ...
        }
    }
}

Подтвержденный ответ

Пользователи уже пытались различные подходы для решения проблемы:

  1. Встраивание шрифта Arial в библиотеку классов и загрузка его во время выполнения.
  2. Использование других шрифтов, таких как Calibri или Tahoma.
  3. Изменение шрифта самого установщика Inno Setup.
  4. Выполнение Application.EnableVisualStyles().

Однако, проблема сохраняется на Windows Server 2008R2, даже несмотря на установку .NET Framework 4.7.2 и использование Unicode версии InnoSetup 5.6.1.

Альтернативный ответ

Исследование проблемы привело к выводу, что функция Windows API SetDefaultDllDirectories, используемая в Inno Setup, может ломать механизм разрешения шрифтов. Это подтверждается информацией из release notes Inno Setup 5.5.9.

Решение проблемы

Для решения данной проблемы можно рассмотреть следующие шаги:

  1. Убедитесь, что WinForms окно работает корректно вне установщика Inno Setup.
  2. Попробуйте собрать библиотеку классов в режиме x86, так как Inno Setup является 32-битным приложением.
  3. В качестве альтернативы, если исполняемый файл запускается из установщика корректно, рассмотрите возможность использования его вместо библиотеки.

Заключение

При работе с Inno Setup и WinForms важно учитывать совместимость с различными версиями Windows. В случае возникновения проблем, связанных с отображением шрифтов, важно тщательно проверить конфигурацию и рассмотреть альтернативные подходы к решению проблемы.

Создано по материалам из источника по ссылке.

Проблема состоит в том, что при использовании Inno Setup и WinForms для создания установщика, на старых версиях Windows (например, Windows Server 2008R2) может возникать ошибка отображения шрифтов из-за несовместимости с функциями Windows API, используем


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 13:36:30/0.0036330223083496/0