|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать MKN,
Подкорректируйте пожалуйста код NetWkstaGetInfo для 2,46, с учетом замечания kotkovets, Цитата kotkovets:
|
|
------- Отправлено: 07:37, 29-10-2015 | #1871 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать wolkow70,
Можно ещё проще, без канители с конвертированием. ( Я ведь такой код уже выкладывал в прошлом году... ) System::Call "netapi32::NetWkstaGetInfo(i0, i100, *i r0 r0) i.r6" System::Call "*$0(i.r1, w.r2, w.r3, i.r4, i.r5)" MessageBox MB_OK "$2 $3 domain (platform_id $1 - ver OS $4.$5) " System::Call "netapi32::NetApiBufferFree(*i r0) i.r6" !include LogicLib.nsh System::Call "netapi32::NetWkstaGetInfo(i0, i100, *i 0 r0) i.r1" ${If} 0 = $1 System::Call "*$0(i.r1, w.r2, w.r3, i.r4, i.r5)" MessageBox MB_OK "$2 $3 domain (platform_id $1 - ver OS $4.$5) " ${EndIf} ${IfThen} $0 <> 0 ${|} System::Call "netapi32::NetApiBufferFree(ir0)" ${|} Работает в Win10 Outfile "OS-Info_test.exe" !ifndef RT_VERSION !define RT_VERSION 16 !endif !ifndef VS_FILE_INFO !define VS_FILE_INFO ${RT_VERSION} !endif !ifndef VS_VERSION_INFO !define VS_VERSION_INFO 1 !endif Section StrCpy $R0 0 System::Call 'kernel32::LoadLibrary(t"kernel32.dll")p.R1' ; System::Call "kernel32::LoadLibrary(t '\path\your.dll(exe)') i .r0" IntCmp $R1 0 error System::Call 'kernel32::FindResource(pR1,p${VS_VERSION_INFO},p${VS_FILE_INFO})p.R2' IntCmp $R2 0 ok System::Call 'kernel32::LoadResource(pR1,pR2)p.R3' IntCmp $R3 0 ok System::Call 'kernel32::LockResource(pR3)p.R4' IntCmp $R4 0 ok System::Call "*$R4(&i2,&i2.R5,&i2,&w16,&i2,i,i,i.R6)" IntCmp $R5 0 ok IntFmt $R0 "0x%08X" $R6 ok: System::Call "kernel32::FreeLibrary(pR1)" error: IntOp $0 $R0 >> 16 IntOp $1 $R0 & 0xFFFF DetailPrint "$0.$1" MessageBox MB_OK "ver $0.$1" SectionEnd Жаль, что только до одного знака подверсии... Возможно можно как то подкорректировтаь... Также интересна функция System::Call 'ntdll::RtlGetVersion , работающая в Win10 Но с её синтаксисом я не разобрался... |
Последний раз редактировалось MKN, 29-10-2015 в 11:04. Отправлено: 10:34, 29-10-2015 | #1872 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать MKN,
Цитата MKN:
DetailPrint 0x00000000 0.0 Completed |
|
------- Отправлено: 13:28, 29-10-2015 | #1873 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата wolkow70:
|
|
Отправлено: 13:40, 29-10-2015 | #1874 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Цитата MKN:
|
|
------- Отправлено: 13:48, 29-10-2015 | #1875 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата wolkow70:
|
|
Последний раз редактировалось MKN, 29-10-2015 в 15:19. Отправлено: 15:05, 29-10-2015 | #1876 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать MKN,
Собственно с вашего копировал... OutFile WinVer-NetWkstaGetInfo.exe InstallDir $TEMP ShowInstDetails show RequestExecutionLevel admin Page instfiles !include LogicLib.nsh # Примечание: В старых версиях NSIS (в том числе 2,46) System plug-in не поддерживае тип р, нужный для правильной работы кода ; используется структура WKSTA_INFO_100 https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa371402(v=vs.85).aspx ; а именно : DWORD wki100_ver_major и DWORD wki100_ver_minor; Section System::Call "netapi32::NetWkstaGetInfo(i0, i100, *i 0 r0) i.r1" ${If} 0 = $1 System::Call "*$0(i.r1, w.r2, w.r3, i.r4, i.r5)" MessageBox MB_OK "$2 $3 domain (platform_id $1 - ver OS $4.$5) " ${EndIf} ${IfThen} $0 <> 0 ${|} System::Call "netapi32::NetApiBufferFree(ir0)" ${|} ;Результат в шестнадцатеричной системе счисления # 0x00050000 5.0 Windows 2000 # 0x00050001 5.1 Windows XP # 0x00050002 5.2 Windows XP (x64), Windows Server 2003, Windows Server 2003 R2 # 0x00060000 6.0 Windows Vista, Windows Server 2008 # 0x00060001 6.1 Windows 7, Windows Server 2008 R2 # 0x00060002 6.2 Windows 8, Windows Server 2012 # 0x00060003 6.3 Windows 8.1, Windows Server 2012 R2 # 0x000A0000 10.0 Windows 10, Windows Server Technical Preview IntFmt $R0 "0x%08X" $R0 DetailPrint "$R0" ; получаем ver_major и ver_minor "в десятичном виде" IntOp $0 $R0 >> 16 IntOp $1 $R0 & 0xFFFF DetailPrint "$0.$1" SectionEnd |
------- Отправлено: 17:29, 29-10-2015 | #1877 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать wolkow70,
В примерах были разные переменные для версий. И во втором варианте НЕ нужно кода конвертации. Т.е. в итоге : OutFile WinVer-NetWkstaGetInfo.exe InstallDir $TEMP ShowInstDetails show RequestExecutionLevel admin Page instfiles !include LogicLib.nsh Section System::Call "netapi32::NetWkstaGetInfo(i0, i100, *i 0 r0) i.r1" ${If} 0 = $1 System::Call "*$0(i.r1, w.r2, w.r3, i.r4, i.r5)" ;MessageBox MB_OK "ver OS $4.$5) " DetailPrint "$4.$5" ${EndIf} ${IfThen} $0 <> 0 ${|} System::Call "netapi32::NetApiBufferFree(ir0)" ${|} SectionEnd |
Отправлено: 17:49, 29-10-2015 | #1878 |
Ветеран Сообщения: 858
|
Профиль | Отправить PM | Цитировать Объясните, пожалуйста, почему если указать в строке 'StrCmp $R0 "0"' 0 +5 сообщение показываеться, а если +4 то нет.
Код
outfile "test.exe" !include "Registry.nsh" Autoclosewindow true Silentinstall silent section "Main" ${registry::KeyExists} "HKCU\Software\11" $R0 StrCmp $R0 "0" 0 +4 ${registry::MoveKey} "HKCU\SOFTWARE\11" "HKCU\SOFTWARE\11_backup" $R4 ${registry::Unload} goto +2 MessageBox mb_ok|mb_iconinformation "Ключа нет" quit sectionend |
------- Отправлено: 08:35, 03-11-2015 | #1879 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Dodakaedr:
это не команды, а макросы, а в макросах может содержаться несколько команд Макрос в NSIS своеобразная "оболочка" для команд, в макросы можно заключить несколько часто используемых команд+удобно потом ориентироваться в коде Т.е. прописывая сроку с макросом, при компиляции эта самая строка может развернуться в несколько десятков строк (в зависимости от команд, которые прописаны в теле макроса) и, соответственно, при использовании всяких +2 +3 +5 прыжков на строку, которая прописана за макросом, может оказаться проблемой и вы получите нерабочий/не правильно работающий код Конкретно в вашем коде - макрос ${registry::MoveKey} содержит в себе 2 строки команд: !macro registry::MoveKey _PATH_SOURCE _PATH_TARGET _ERR registry::_MoveKey /NOUNLOAD `${_PATH_SOURCE}` `${_PATH_TARGET}` Pop ${_ERR} !macroend Для решения этой проблемы либо создавайте метку и указывайте её в качестве цели "прыжка" (за место +4), либо еще лучше, пользуйтесь конструкциями с ${If} outfile "test.exe" !include "Registry.nsh" Autoclosewindow true Silentinstall silent section "Main" ${registry::KeyExists} "HKCU\Software\11" $R0 ${If} $R0 == "0" ${registry::MoveKey} "HKCU\SOFTWARE\11" "HKCU\SOFTWARE\11_backup" $R4 ${registry::Unload} ${Else} MessageBox mb_ok|mb_iconinformation "Ключа нет" ${EndIf} quit sectionend |
|
------- Отправлено: 10:00, 03-11-2015 | #1880 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|