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

StackOverflow https://stackoverflow.com/questions/1604205

  •  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>
&emsp;InitPluginsDir<br>
&emsp;File /oname=$PLUGINSDIR\test.exe test.exe<br>
&emsp;ExecWait "$PLUGINSDIR\test.exe"<br>
SectionEnd
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top