Как скрыть все окна, пока они мне не понадобятся в NSIS

У меня есть установщик NSIS, и я хочу быть полностью бесшумным, если ему не нужно загружать дополнительные файлы. Я могу сделать его полностью бесшумным с помощью SilentInstall, но тогда я не могу открыть диалоговое окно загрузки (я использую InetLoad::load).

Я хотел бы сказать NSIS не показывать никаких окон, пока я не скажу. Лучшее, что я могу придумать, это HideWindow. К сожалению, похоже, что NSIS по умолчанию показывает окно, а затем скрывает его, вызывая мерцание.

Как я могу предотвратить мерцание окна?

Пример кода:

Name "Flicker test"
OutFile "flickertest.exe"

AutoCloseWindow true

Section
    HideWindow
SectionEnd

person Jon Clegg    schedule 21.10.2009    source источник


Ответы (2)


Это хак способ сделать это:

!include "${NSISDIR}\Examples\System\System.nsh"

Name "No Flicker test"
OutFile "noflickertest.exe"

AutoCloseWindow true

Function .onGUIInit
    ; move window off screen
    System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($HWNDPARENT, 0, -10000, -10000, 0, 0, ${SWP_NOOWNERZORDER}|${SWP_NOSIZE})"
FunctionEnd

Section -main
    HideWindow
SectionEnd
person djp    schedule 09.11.2009

Вы можете использовать пропуск страниц Пример для MUI2 (скрыть страницу каталога, если режим обновлен):

!define MUI_PAGE_CUSTOMFUNCTION_PRE dirPre
!insertmacro MUI_PAGE_DIRECTORY

Function dirPre
    StrCmp $Mode "update" +1 +2
    abort
FunctionEnd
person Zanir    schedule 27.10.2011