Как добавить таймер обратного отсчета в коде InstallScript? - PullRequest
0 голосов
/ 28 мая 2018

Я создал проект Basic MSI и написал пользовательское действие InstallScript для загрузки файла с сервера.Я использовал CopyFile() функцию для этого.Я также показываю sdShowMsg() во время этой загрузки.Но когда сервер загрузки не отвечает, диалог sdShowMsg() остается таким же, как на экране и в фоновой загрузке, не происходит.Так есть ли способ добавить таймер обратного отсчета, который будет выполнять операцию загрузки только в течение этого периода времени, а затем выйти из него.Или есть какой-нибудь другой способ проверить, является ли сервер загрузки отзывчивым или нет?

SdShowMsg("Please Wait... Downloading file from our server...", TRUE);
CopyFile("https://<downloadURL>/sample.rtf", szEULAFile);
SdShowMsg("Please Wait... Downloading file from our server...", FALSE);

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете заменить вызов CopyFile внешней командой для загрузки файлов, а затем использовать функцию LaunchApp (), установив тайм-аут.Вот небольшой псевдо-пример использования powershell (вы также можете использовать curl.exe и многие другие методы для загрузки файлов из командной строки)

nOptions = LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN | LAAW_OPTION_FIXUP_PROGRAM | LAAW_OPTION_SHOW_HOURGLASS;
LAAW_PARAMETERS.nTimeOut = 30000;  // 30 seconds
SdShowMsg("Downloading, please wait...", TRUE);
nResult = LaunchAppAndWait( "powershell", "-Command \"Invoke-WebRequest -Uri https://example.com/sample.rtf -OutFile " + szEULAFile + "\"", nOptions); 
SdShowMsg("", FALSE);
if nResult < 0 then
  // failed to launch, notify the user
elseif (nResult == 5) || (nResult == 259) then
  // timeout reached, notify the user
endif;
...