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

Проверка запущенных процессов в Windows 2008 R2 64bit с помощью Inno Setup: решение проблемы совместимости

Delphi , ОС и Железо , Windows

Приветствую, уважаемые разработчики! В этой статье мы рассмотрим проблему, с которой сталкиваются специалисты при использовании Inno Setup для проверки запущенных процессов на 64-битных системах Windows, в частности, Windows 2008 R2. Мы обсудим, почему стандартный подход с использованием DLL psvince.dll не работает, и предложим альтернативные решения, которые позволят вам успешно решить данную задачу.

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

Пользователи Inno Setup часто сталкиваются с необходимостью проверки, запущен ли определенный процесс на компьютере перед установкой программы. Для этого существует несколько подходов, но один из популярных методов — использование внешней библиотеки psvince.dll. Однако, как выяснилось, данный метод не работает на 64-битных системах, поскольку psvince.dll не может корректно обрабатывать 64-битные процессы.

Пример кода, который не работает

[Files]
Source: "psvince.dll"; Flags: dontcopy

[Code]
function IsModuleLoaded(modulename: AnsiString): Boolean;
external 'IsModuleLoaded@files:psvince.dll stdcall';

function InitializeSetup(): Boolean;
begin
  if(IsModuleLoaded('notepad.exe')) then
    begin
      MsgBox('Running', mbInformation, MB_OK);
      Result := False;
    end
  else
    begin
      MsgBox('Not running', mbInformation, MB_OK);
      Result := True;
    end
end;

Альтернативные решения

Использование WMI

Один из способов — использование WMI (Windows Management Instrumentation) для проверки запущенных процессов. Вот пример функции, которая делает это:

function IsAppRunning(const FileName: string): Boolean;
var
  FSWbemLocator: Variant;
  FWMIService: Variant;
  FWbemObjectSet: Variant;
begin
  Result := False;
  FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
  FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
  FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName]));
  Result := (FWbemObjectSet.Count > 0);
  // Освобождение ресурсов
  FWbemObjectSet := Unassigned;
  FWMIService := Unassigned;
  FSWbemLocator := Unassigned;
end;

Использование FindWindowByClassName

Если приложение имеет уникальный класс окна, можно использовать функцию FindWindowByClassName для проверки его запущенности:

function IsAppRunning(): Boolean;
begin
  Result := (FindWindowByClassName('{#AppWndClassName}') <> 0) or
            (FindWindowByClassName('{#AltAppWndClassName}') <> 0);
end;

Использование мутексов

Для более сложных сценариев можно использовать мутексы. В Inno Setup есть функция CheckForMutexes, которая может быть полезна.

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

К сожалению, psvince.dll не может корректно работать с 64-битными процессами. В качестве альтернативы можно использовать утилиту processviewer.exe, доступную на GitHub.

Заключение

В данной статье мы рассмотрели проблему проверки запущенных процессов в Windows 2008 R2 64bit с помощью Inno Setup и предложили несколько решений, которые помогут вам в этом непростом вопросе. Выбирайте подходящий вам метод в зависимости от конкретной задачи и требований вашего проекта.

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

Проблема совместимости Inno Setup с 64-битными процессами в Windows 2008 R2, поиск решений для проверки запущенных процессов.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 17:08:30/0.0032699108123779/0