|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата wolkow70:
Запускаю тот же скомпилированный скрипт с флешки - ОС Win10, почему то определяется как Win8 + прочие параметры восьмёрки... И как это понимать ? ![]() ![]() |
|
Отправлено: 15:30, 22-10-2015 | #1861 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать MKN,
Windows 8.1 - 6.3 Windows 8 - 6.2 Windows 10 - 10.0 https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx У меня в реестре почему-то [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] "ProductName"="Windows 10 Home" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] "CurrentVersion"="6.3" Цитата MKN:
|
|
------- Отправлено: 15:45, 22-10-2015 | #1862 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Т.е. - при запуске exe-скрипта с флешки из под Win10 и с помощью чисто GetVersionEx, и с помощью WinVer2.nsh - ошибочная версия ОС. (при запуске с флешки из под W7 и W8 - всё ОК)
При запуске с флешки из под Win10 с помощью WMI.nsh ( т.е. с использованием WMIC) - всё определяется правильно : ;http://nsis.sourceforge.net/WMI_header OutFile "OperatingSystemInfo.exe" !include MUI2.nsh !include WMI.nsh !include LogicLib.nsh !insertmacro MUI_LANGUAGE "English" Var WMI_Caption Var WMI_Version Var WMI_CSDVersion Var WMI_ServicePackMajorVersion Var WMI_ServicePackMinorVersion Var WMI_PushVar Section ; короткое описание версии операционной системы ${WMIGetInfo} root\CIMV2 Win32_OperatingSystem Caption callback_Function StrCpy $WMI_Caption $WMI_PushVar ; версия ОС ${WMIGetInfo} root\CIMV2 Win32_OperatingSystem Version callback_Function StrCpy $WMI_Version $WMI_PushVar ; последний установленный сервис-пак (строка); если никакой сервис-пак не установлен, пустая строка. ${WMIGetInfo} root\CIMV2 Win32_OperatingSystem CSDVersion callback_Function StrCpy $WMI_CSDVersion $WMI_PushVar ; версия сервис-пака ${WMIGetInfo} root\CIMV2 Win32_OperatingSystem ServicePackMajorVersion callback_Function StrCpy $WMI_ServicePackMajorVersion $WMI_PushVar ; подверсия сервис-пака ${WMIGetInfo} root\CIMV2 Win32_OperatingSystem ServicePackMinorVersion callback_Function StrCpy $WMI_ServicePackMinorVersion $WMI_PushVar SectionEnd Function callback_Function System::Call "user32::OemToChar(t R2, t. r2)" detailprint "$2" StrCpy $WMI_PushVar $2 FunctionEnd OutFile "WMI_OperatingSystem.exe" !include "LogicLib.nsh" !macro IWbemClassObject->Get NameObject OUT System::Call "*(i,i,i)i.R4" System::Call "$R3->4(w'${NameObject}',i0,iR4,i0,i0)" System::Call "*$R4(i.R6,i,i.R5)" StrCmp $R6 3 0 +2 IntFmt $R5 %u $R5 StrCmp $R6 8 0 +2 !ifdef NSIS_UNICODE IntFmt $R5 %s $R5 !else IntFmt $R5 %S $R5 !endif System::Call "ole32::VariantClear(iR4)" System::Free $R4 StrCpy ${OUT} $R5 !macroend Section System::Call "ole32::CoInitializeEx(i0,i2)" System::Call "ole32::CoCreateInstance(g'{4590f811-1d3a-11d0-891f-00aa004b2e24}',i0,i1,g'{dc12a687-737f-11cf-884d-00aa004b2e24}',*i.R0)i.R7" ${If} $R7 == 0 System::Call "ole32::CoInitializeSecurity(i0,i-1,i0,i0,i2,i3,i0,i0,i0)" System::Call "$R0->3(w'root\CIMV2',i0,i0,i0,i0,i0,i0,*i.R1)i.R7" ${If} $R7 == 0 System::Call "$R1->20(w'WQL', w'SELECT * FROM Win32_OperatingSystem',i48,i0,*i.R2)i.R7" System::Call "$R2->4(i0xffffffff,i1,*i.R3,*i)i.R7" ${If} $R7 == 0 !insertmacro IWbemClassObject->Get "Caption" $7 MessageBox MB_OK "Caption=$7" !insertmacro IWbemClassObject->Get "Version" $7 MessageBox MB_OK "Version=$7" System::Call "$R0->2()" System::Call "$R1->2()" System::Call "$R2->2()" System::Call "$R3->2()" ${Else} System::Call "$R0->2()" System::Call "$R1->2()" System::Call "$R2->2()" ${EndIf} ${Else} System::Call "$R0->2()" System::Call "$R1->2()" ${EndIf} ${EndIf} SectionEnd PS StdUtils плаг - также правильно определяет параметры Win10, и с флешки и с HDD. (кстати, он обновился Version 1.08, released 2015-10-10 ) |
Последний раз редактировалось MKN, 22-10-2015 в 16:34. Отправлено: 15:56, 22-10-2015 | #1863 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать MKN,
Коды WMI работают, но нужно в какой-то переменной просто получить значение 10, а не полную версию Оси. Можно конечно отрезать, но это уже гемор дополнительный. |
------- Последний раз редактировалось wolkow70, 22-10-2015 в 17:44. Отправлено: 17:39, 22-10-2015 | #1864 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата MKN:
|
|
------- Отправлено: 20:15, 22-10-2015 | #1865 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Пример "географического" кода для определения параметров локализации
(используются функции GetUserDefaultLangID GetLocaleInfo GetUserGeoID GetGeoInfo ) :
В частности, практический интерес представляет функция GetUserGeoID. Можно автоматом (не выбирая язык из списка) устанавливать, к примеру, язык интерфейса установки и т.д., соответствующий локали пользователя, запустившего инсталлятор. |
Последний раз редактировалось MKN, 24-10-2015 в 12:37. Отправлено: 12:27, 24-10-2015 | #1866 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Да... Похоже для определения Windows 10 надо использовать новую функцию - IsWindowsVersionOrGreater
http://stackoverflow.com/questions/3...ect-windows-10 http://www.tek-tips.com/faqs.cfm?fid=7848 Осталось адаптировать эту функцию под NSIS... |
Отправлено: 11:12, 25-10-2015 | #1867 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Вариант определения major и minor версий ОС с помощью функции NetWkstaGetInfo.
В Win 10 работатет (и с флешки тоже) OutFile WinVer-NetWkstaGetInfo.exe InstallDir $TEMP ShowInstDetails show RequestExecutionLevel admin Page instfiles # Примечание: В старых версиях 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(pn,i100,*p.R1)i.R2" System::Call "*$R1(i,p,p,i.R3,i.R4)" # в $R3 - основной номер версии ОС ver_major, в $R4 - доп. номер версии**ver_minor IntOp $R0 $R3 << 16 IntOp $R0 $R0 | $R4 System::Call "netapi32::NetApiBufferFree(pR1)" ;Результат в шестнадцатеричной системе счисления # 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 |
Отправлено: 13:01, 27-10-2015 | #1868 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать MKN,
Я для своих нужд так сделал: Var IsOSWin10 StrCpy $IsOSWin10 "0" Push $R0 Push $R1 ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductName" StrCpy $R1 $R0 10 ${If} $R1 == "Windows 10" StrCpy $IsOSWin10 "1" ${EndIf} Pop $R1 Pop $R0 ${If} $IsOSWin10 == "1" Выполняем комманды для Windows 10 ${EndIf} |
------- Последний раз редактировалось wolkow70, 27-10-2015 в 18:53. Отправлено: 14:57, 27-10-2015 | #1869 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата MKN:
Цитата MKN:
|
||
------- Последний раз редактировалось kotkovets, 29-10-2015 в 08:10. Причина: i вместо p Отправлено: 21:40, 27-10-2015 | #1870 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|