Могу ли я показать пользовательское окно перед всеми страницами мастера в Inno Setup? - PullRequest
0 голосов
/ 31 марта 2020

Я экспортирую функцию из dll следующим образом:

function IsClientLaunched : Boolean;                                                  
external 'IsClientStarted@files:IsStart.dll stdcall setuponly';

Мне нужна эта функция, чтобы проверить, запущено ли уже мое приложение или нет. Он возвращает True, если он работает, и false, если это не так. Что мне нужно сделать, так это то, что в зависимости от результата этой функции мне нужно показать пользовательское окно с пользовательским сообщением и 2 кнопками: Continue и Cancel. Поэтому, если я закрою приложение и нажму Continue, процесс установки продолжится. Если я нажму Cancel, установщик завершит свою работу и закроется. Проблема в том, что я не знаю, как показать это пользовательское окно перед всеми страницами мастера и возможно ли это сделать?

Кроме того, я использую ISSI, чтобы показать экран spla sh:

#define ISSI_Splash "C:\InnoSetupProject\Images\client.bmp"                    
#define ISSI_Splash_T 3                                                                      
#define ISSI_Splash_X 500                                                                     
#define ISSI_Splash_Y 220                                                                                                                                     

С этим тоже есть одна проблема. Если я покажу диалог MsgBox перед первой страницей мастера и нажму Cancel на нем, я хочу, чтобы моя программа установки закрылась, но вместо этого он все равно показывает мне экран spla sh и затем закрывается. Могу ли я как-то отменить это, если мне это нужно в InitializeSetup?

Ответы [ 2 ]

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

Используйте код из:
Можно ли проверить, запущена ли программа, прежде чем пытаться ее установить? (Inno Setup)
(это ваш вопрос!)

И просто замените IsAppRunning на IsClientLaunched.

Хотя теперь вопрос в том, нужен ли вообще ваш кастом IsClientLaunched. Вместо этого вы можете использовать IsAppRunning.

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

Согласно документации CreateCustomPage параметры для создания пользовательской страницы следующие:

function CreateCustomPage(const AfterID: Integer;
                          const ACaption,
                          ADescription: String): TWizardPage;

Как видите, вы предоставляете AfterID, что подразумевает вас может сказать, чтобы она показала пользовательскую страницу после заданной c встроенной страницы.

Но рассматривали ли вы вопрос об использовании PrepareToInstall? В нем говорится:

Эту функцию события можно использовать для обнаружения и установки отсутствующих предварительных условий и / или для закрытия любого приложения, которое будет обновлено.

Так что, возможно, вы можете провести там свои тесты и показать любое необходимое всплывающее окно с сообщением. Затем, основываясь на ответе, вы можете вернуться с соответствующим сообщением об ошибке. Документация объясняет.

Могут быть и другие способы сделать то, что вы хотите.

...