Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Привет, есть задача научить запускать скомпилированный exe nsis'ом только при наличии параметра, то есть:
Installer.exe -start - установщик запускается как положенно.
Installer.exe - без параметра, запуска не происходит.
Каким образом можно реализовать?
Begin2Fly
14-08-2019, 15:09
Привет, есть задача научить запускать скомпилированный exe nsis'ом только при наличии параметра »
Получаем параметры, ищем -start. Если есть, работаем, иначе завершение приложение.
${GetParameters} $CMDLINE
ClearErrors
${GetOptions} $CMDLINE "-start" $1
${IfNot} ${Errors}
MessageBox MB_OK "Параметр -start получен"
${Else}
Quit ; иначе - завершение приложения
${EndIf}
Begin2Fly, благодарю, есть так же задача научить запускать скомпилированный exe nsis'ом только при определенном имени exe:
имя Installer.exe - запускается в обычном режиме
имя отличное от Installer.exe - завершаться
Каким образом можно реализовать?
Begin2Fly
14-08-2019, 19:15
${If} $EXEFILE == "Installer.exe"
MessageBox MB_OK "Обычный режим"
${Else}
Quit
${EndIf}
динозавра
15-08-2019, 08:23
Друзья, нужна помощь. Состряпал для эксперимента экзешник.
Как запустить установленный батник?
Вот код
!define PRODUCT_NAME "PRODUCT"
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "C:\Program Files\Proga"
Icon "icon.ico"
SilentInstall silent
!define RUN "C:\Program Files\Proga\1.bat"
Section "MainSection" SEC01
SetOutPath "C:\Program Files\Proga"
SetOverwrite on
File "..\1.bat"
SectionEnd
Section -Post
SectionEnd
Все, разобрался.
Exec '"$INSTDIR\1.bat"'
Теперь другая проблема. Как прописать, чтобы окошко батника не промилькивало?
обновился NSIS Dialog Designer
v.1.4.4 - 2019-08-01
FIX: Removed decimals from control coordinates in generated NSIS script.
Как прописать, чтобы окошко батника не промилькивало? »
почитай, к примеру https://stackoverflow.com/questions/45500072/run-a-batch-file-silentily-in-nsis
Теперь другая проблема. Как прописать, чтобы окошко батника не промилькивало? »
nsExec::Exec '"$INSTDIR\1.bat"'
динозавра
18-08-2019, 16:23
iglezz,
Спасибо, все красиво и не мелькает.. А то я уже через .vbs слепил.
динозавра
21-08-2019, 06:47
Друзья, У меня опять супер проблема. Ну никак не работает удаление файла из папки System32 на Вин х64.
Уже пишу такое и никак:
!include "x64.nsh"
Section
Delete "$WINDIR\System32\1.txt
Delete "$SYSDIR\1.txt
Delete "C:\Windows\System32\1.txt"
SectionEnd
Но если я подсовываю 1.txt в SysWOW64 то оттуда удаляет. Что я делаю не так?
Begin2Fly
21-08-2019, 11:01
${DisableX64FSRedirection}
динозавра
22-08-2019, 05:34
Begin2Fly,
Спасибо.
Еще чуток лет и я постигну азы NSIS.
И еще вопрос, в NSIS есть такое, чтобы MessageBox было без MB_YESNO и т.д, а чтобы окошко показывалось, к примеру с моей фразой нужное количество секунд?
И, где вы берете все эти коды? Ведь в справке их нет.
И, где вы берете все эти коды? Ведь в справке их нет. »
1. помимо справки полезно изучить содержимое каталога nsis:
Include\ содержит заголовочные файлы (.nsh), подключаемые через !include. Многие хорошо документированы
Examples\ -- примеры к nsh и плагинам
Docs\ -- документы к nsh и плагинам
2. https://nsis.sourceforge.io/Developer_Center -- дополнительные плагины, примеры
И еще вопрос, в NSIS есть такое, чтобы MessageBox было без MB_YESNO и т.д, а чтобы окошко показывалось, к примеру с моей фразой нужное количество секунд? »
Если совсем без кнопок и с таймером -- есть в базовой поставке плагин Banner
А вот пример MessageBox с таймаутом:
Name "MessageBoxTimeout"
OutFile "MessageBoxTimeout.exe"
RequestExecutionLevel user
Page instfiles
Section ""
SectionEnd
; заголовок
Var MsgBoxTitle
; текст
Var MsgBoxText
; таймаут в милисекундах
Var MsgBoxTimeout
; параметр uType (комбинация значений)
; https://docs.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-messageboxa
Var MsgBoxParams
Function .onInit
StrCpy $MsgBoxTimeout 3500 ; время в милисекундах
StrCpy $MsgBoxTitle "MessageBoxTimeoutA func test"
StrCpy $MsgBoxText "Timeout set to $MsgBoxTimeout msec."
StrCpy $MsgBoxParams 0x00001000 ; MB_SYSTEMMODAL
IntOp $MsgBoxParams $MsgBoxParams | 0x00010000 ; MB_SETFOREGROUND
IntOp $MsgBoxParams $MsgBoxParams | 0x00000030 ; MB_ICONEXCLAMATION
IntOp $MsgBoxParams $MsgBoxParams | 0x00000004 ; MB_YESNO
System::Call "user32::MessageBoxTimeoutA(p $HWNDPARENT, t '$MsgBoxText', t '$MsgBoxTitle', i $MsgBoxParams, i 0, i $MsgBoxTimeout)i.s"
Pop $0
MessageBox MB_OK|MB_ICONINFORMATION "result = $0"
Quit
FunctionEnd
чтобы MessageBox было без MB_YESNO и т.д, а чтобы окошко показывалось, к примеру с моей фразой нужное количество секунд? »
Кнопочку для закрытия сообщения всё же лучше оставить (может пользователь быстро прочёл, либо вовсе не желает читатать сообщение...)
Пример попроще(суть та же, что и выше) :
OutFile "MsgBoxTimeoutTest.exe"
!define MsgBoxTimeout "!insertmacro macro__MsgBoxTimeout"
!macro macro__MsgBoxTimeout text caption_text time
System::Call "user32::MessageBoxTimeout(i$HWNDPARENT, t`${text}`, t`${caption_text}`,i0,i0, i${time})"
!macroend
Section
${MsgBoxTimeout} "Сообщение закроется через 2 секунды" "MessageBoxTimeout" 2000
SectionEnd
помимо справки полезно изучить содержимое каталога nsis »
А также просмотреть тему. Всё, что динозавра спрашивал уже было рассмотрено.
динозавра
23-08-2019, 07:35
Всем привет.
Вот, что у меня получилось.
!define NAME "Registry cleaning"
VIProductVersion "0.0.0.1"
VIAddVersionKey "LegalCopyright" "© Lbyjpfdh"
VIAddVersionKey "FileVersion" "0.1"
VIAddVersionKey "FileDescription" "Cleaning and editing the registry"
VIAddVersionKey "ProductName" "For version Total Uninstall 6.27.0.565"
VIAddVersionKey "ProductVersion" "0.0.0.1"
Name "${NAME}"
Caption "${NAME}"
OutFile "Cleaning and editing the registry.exe"
InstallDir "$TEMP"
Icon "icon.ico"
!include x64.nsh
!include "FileFunc.nsh"
!include "LogicLib.nsh"
SilentInstall silent
SetCompress off
Section
SetOutPath "$TEMP"
SetOverwrite on
File "..\..\..\..\install\Registry cleaning.exe"
File "..\..\..\..\install\TrashRegFull.exe"
File "..\..\..\..\install\TrashRegX64Full.exe"
File "..\..\..\..\install\ACL.TXT"
File "..\..\..\..\install\ACLL.TXT"
File "..\f.bat"
Delete "$APPDATA\mntemp"
Delete "$WINDIR\System32\linjqbyk.kfl"
Delete "$SYSDIR\linjqbyk.kfl"
Delete "$WINDIR\SysWOW64\linjqbyk.kfl"
SectionEnd
Section
${DisableX64FSRedirection}
Delete "$WINDIR\System32\linjqbyk.kfl"
Delete "$SYSDIR\linjqbyk.kfl"
SectionEnd
Function .onInit
System::Call "kernel32::GetUserDefaultLCID() i.r0"
IntOp $LANGUAGE $0 & 0xFFFF
IntFmt $0 "%04X" $0
FunctionEnd
Section
${If} $0 = 0419
MessageBox MB_YESNO|MB_TOPMOST|MB_USERICON "Хотие очистить реестр от триальных ключей?" IDYES a IDNO b
Abort
a:
Exec '"$INSTDIR\Registry cleaning.exe"'
nsExec::Exec '"$INSTDIR\f.bat"'
MessageBox MB_OK|MB_TOPMOST|MB_USERICON "Реестр от триальных ключей очищен."
b:
Delete "$INSTDIR\*.*"
Abort
MessageBox MB_OK|MB_TOPMOST|MB_USERICON "Реестр от триальных ключей очищен."
Delete "$INSTDIR\*.*"
${EndIf}
${If} $0 != 0419
MessageBox MB_YESNO|MB_TOPMOST|MB_USERICON "Wanting to clear the registry of trial keys?" IDYES c IDNO d
Abort
c:
Exec '"$INSTDIR\Registry cleaning.exe"'
nsExec::Exec '"$INSTDIR\f.bat"'
MessageBox MB_OK|MB_TOPMOST|MB_USERICON "The registry of trial keys is cleared."
d:
Delete "$INSTDIR\*.*"
Abort
MessageBox MB_OK|MB_TOPMOST|MB_USERICON "The registry of trial keys is cleared."
Delete "$INSTDIR\*.*"
${EndIf}
SectionEnd
Теперь по порядку.
Registry cleaning.exe" это файл с кодом:
OutFile "Registry cleaning.exe"
!define MsgBoxTimeout "!insertmacro macro__MsgBoxTimeout"
!macro macro__MsgBoxTimeout text caption_text time
System::Call "user32::MessageBoxTimeout(i$HWNDPARENT, t`${text}`, t`${caption_text}}`,i0,i0, i${time})"
!macroend
SilentInstall silent
SetCompress off
!include "LogicLib.nsh"
Function .onInit
System::Call "kernel32::GetUserDefaultLCID() i.r0"
IntOp $LANGUAGE $0 & 0xFFFF
IntFmt $0 "%04X" $0
FunctionEnd
Section
${If} $0 = 0419
${MsgBoxTimeout} "Процес очистки закончится через несколько секунд." "Registry cleaning" 2500
${EndIf}
${If} $0 != 0419
${MsgBoxTimeout} "The cleaning process will end in a few seconds." "Registry cleaning" 2500
${EndIf}
SectionEnd
Файлы TrashRegFull.exe и TrashRegX64Full.exe - это "вылеченные" TrashReg, чтобы могла работать в форсированом, скрытом режиме.
Файлы ACL.TXT и ACLL.TXT - это получение прав владельца на ключ реестра с использованием встроенной команды REGINI.
Файлы - mntemp и linjqbyk.kfl один из многих видов защиты Гаврилы.
Файл f.bat - это батник с таким содержимым:
@echo off
start /wait TrashRegFull.exe /forced
start /wait TrashRegX64Full.exe /forced
REGINI "%temp%\acl.txt"
reg delete "HKEY_LOCAL_MACHINE\SECURITY" /va /f
reg add "HKEY_LOCAL_MACHINE\SECURITY" /v SecFlagsR0E /t reg_dword /d 4294967295 /f
reg add "HKEY_LOCAL_MACHINE\SECURITY" /v SecFlagsR0D /t reg_dword /d 4294967295 /f
REGINI "%temp%\acll.txt"
exit /b
Для чего сделана эта "поделка"?
После применения возобновляется работа Total Uninstall 6.27.0.565 с недоломаным лекарством от RmK-FreE. Лекарству от Jongan тоже в помощь.
Так же попутно очищается реестр от "мусорных" ключей, отвечающих за триальный период многих програм.
Готовая поделка лежит тут - https://www.upload.ee/files/10389548/Cleaning_and_editing_the_registry.zip.html
Огромная благодарность всем отозвавшимся на мои просьбы о помощи (начиная с моего первого "помогите" Отправлено: 20:53, 09-08-2015 | #1739)
Так и не осилил "прикрутить" показ иконки в Registry cleaning.exe и избавиться от кнопки ОК. (Так, было бы красивей и практичней, может, кто поможет и в этом), но для начала сойдет и так.
Привет народ, :)
Вообщем, я тут по граблям реестра::
Имеется такой батник:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Games\Gothic II\System\Spacer.exe" /t REG_SZ /f /d DisableNXShowUI" "HIGHDPIAWARE
Я его прикрутил к инсис в виде такого кода:
Function DepInstExceptionEx
IfFileExists "$INSTDIR\System\Spacer.exe" 0 +7
ReadRegStr $R0 HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\System\Spacer.exe"
StrCmp $R0 "HIGHDPIAWARE" 0 ACFlagsLayers
DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\System\Spacer.exe"
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\System\Spacer.exe" "DisableNXShowUI"
StrCpy $R0 0
FunctionEnd
который толком не работает, из этого вопросы::
1. как поправить код в нсис чтобы работало на осях Вынь ХР ... Вынь 10 ?
2. если код в нсис не поправить, то как передать из скрипта путь игры расположенный на компе клиента ?
3. или есть какой может вариант как батник поправить, тога бы его в тихом режиме запускать без вывода окон и прочей ереси.. ?
4. код батника из скрипта запускать напрямую можно вообще ?!
Спасибо ,)
динозавра
26-08-2019, 08:35
Имеется такой батник: »
Если я правильно понял, то ваш батник попросту добавляет в реестр:
параметр C:\Games\Gothic II\System\Spacer.exe тип REG_SZ с данными DisableNXShowUI" "HIGHDPIAWARE
Какие то данные странные DisableNXShowUI" "HIGHDPIAWARE , но это вы их так написали.
То тогда, вот ваш батник без запроса:
@echo off
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Games\Gothic II\System\Spacer.exe" /d DisableNXShowUI" "HIGHDPIAWARE /f
exit /b
Как раз несколько постов назад MKN и iglezz мне объясняли команду, которая делает запуск батника в NSIS невидимым:
nsExec::Exec '"$INSTDIR\1.bat"'
А добавление вашего параметра в реестр в NSIS выглядит примерно так: (но не уверен с кавычками в данные).
OutFile "HKCU.exe"
SilentInstall silent
Section
WriteRegStr HKCU "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "C:\Games\Gothic II\System\Spacer.exe" "DisableNXShowUI HIGHDPIAWARE"
SectionEnd
Или вы не это спрашивали?
Если я правильно понял, то ваш батник попросту добавляет в реестр:
параметр C:\Games\Gothic II\System\Spacer.exe тип REG_SZ с данными DisableNXShowUI" "HIGHDPIAWARE
Какие то данные странные DisableNXShowUI" "HIGHDPIAWARE , но это вы их так написали.
То тогда, вот ваш батник без запроса: »
Да, правильно.. нормальные там данные, параметры ДЕПа и фикса высоких разрешений.. )
Как раз несколько постов назад MKN и iglezz мне объясняли команду, которая делает запуск батника в NSIS невидимым: »
Видел, но все-же стараюсь обходиться без батников, только в особо редких случаях их пользую, если уже совсем не вариант в нсис приколхозить..
Или вы не это спрашивали? »
От части, но я уже сам разобрался со всем с этим. У меня почему-то ни как не хотели прописываться в реестр эти значения на Вынь 10 при установке, хотя на моей ХР все работало отлично.. Пришлось разгружать проверки и переписывать иначе код и пути ко всему для этого дела. Возможно то был какой-то локальный баг моего старого юникодного НСИС ?! хз..
У меня почему-то ни как не хотели прописываться в реестр эти значения на Вынь 10 при установке, хотя на моей ХР все работало отлично.. »
А Вы учитываете возможную разницу при работе между XP, которая наверняка была x86, и Windows 10, которая, возможно, была x64?
А Вы учитываете возможную разницу при работе между XP, которая наверняка была x86, и Windows 10, которая, возможно, была x64? »
А что там учитывать-то ? разрядность Оси в моем случае никакого значения не играет, не говоря уже о том, что те функции для работы с реестрам которые использовались, до ужаса банальны.. а не от расчетов ракетостроения.. )
динозавра
14-09-2019, 12:58
Всем привет. Подскажите, можно как то поменять в строке файла .xml , в которой есть число (неизвестное) одну любую цифру на случайную или как крайний вариант на заданную?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.