Как скрыть все окна, пока они мне не понадобятся в NSIS
-
05-07-2019 - |
Вопрос
У меня есть установщик NSIS. Я хочу быть совершенно бесшумным, если только ему не нужно загружать дополнительные файлы. С помощью SilentInstall я могу сделать его совершенно бесшумным, но потом не могу отобразить диалоговое окно загрузки (использую InetLoad :: load). Р>
Я бы хотел попросить NSIS не показывать окна, пока я не скажу. Лучшее, что я могу придумать, это HideWindow. К сожалению, похоже, что по умолчанию NSIS показывает окно, а затем скрывает его, вызывая мерцание. Р>
Как я могу предотвратить мерцание окна?
Пример кода:
Name "Flicker test" OutFile "flickertest.exe" AutoCloseWindow true Section HideWindow SectionEnd
Решение
Это хакерский способ сделать это:
!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
Другие советы
Вы можете использовать пропуск страниц Пример для MUI2 (скрыть страницу каталога, если режим обновляется): р>
!define MUI_PAGE_CUSTOMFUNCTION_PRE dirPre
!insertmacro MUI_PAGE_DIRECTORY
Function dirPre
StrCmp $Mode "update" +1 +2
abort
FunctionEnd
OutFile "example.exe"
SilentInstall silent
RequestExecutionLevel user<br>
ReserveFile test.exe
Section ""<br>
 InitPluginsDir<br>
 File /oname=$PLUGINSDIR\test.exe test.exe<br>
 ExecWait "$PLUGINSDIR\test.exe"<br>
SectionEnd
Не связан с StackOverflow