|
Компьютерный форум 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 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата Salmo:
StrCpy $0 "hwnd" System::Call "user32::IsWindowVisible(i r0)i.r0" # $0 here is non-zero if the window is visible. Цитата Salmo:
или EnhancedFindWindow Вот код, перечислит все видимые окна : !include LogicLib.nsh showinstdetails show outfile wind.exe Section System::Get "(i.r1) iss" Pop $R0 System::Call "user32::EnumWindows(k R0,i) i.s" loop: Pop $0 StrCmp $0 "callback1" 0 done System::Call "user32::IsWindowVisible(ir1)i.r2" ${If} $2 <> 0 System::Call "user32::GetWindowText(ir1,t.r2,i${NSIS_MAX_STRLEN})" System::Call "user32::GetClassName(ir1,t.r3,i${NSIS_MAX_STRLEN})" IntFmt $1 "0x%X" $1 DetailPrint "$1 - [$3] $2" ${EndIf} Push 1 # callback's return value System::Call "$R0" Goto loop done: System::Free $R0 Sectionend |
||
Последний раз редактировалось MKN, 02-11-2013 в 14:48. Отправлено: 14:42, 02-11-2013 | #691 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 136
|
Профиль | Отправить PM | Цитировать MKN, Спасибо! Обошелся поиском всех видимых окон и последующей фильтрацией... Как всегда, что-нибудь упустишь! Нужно еще определить размер окна и его расположение на мониторе...
|
Отправлено: 22:42, 02-11-2013 | #692 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата Salmo:
;Функция GetWindowRect извлекает размеры рабочего прямоугольника определяемого окна. ;Размеры даются в экранной системе координат, которые считаются относительно ; левого верхнего угла экрана ; Create RECT struct System::Call "*${stRECT} .r1" ; Find Window info for the window we're displaying System::Call "User32::GetWindowRect(i, i) i ($HWNDPARENT, r1) .r2" OutFile Rect_test.exe Section Push $R0 System::Call /NOUNLOAD "*(i, i, i, i) i.s" Pop $R0 System::Call /NOUNLOAD 'User32::GetWindowRect(i, i) i ($HWNDPARENT, R0)' System::Call /NOUNLOAD "*$R0(i .s, i .s, i .s, i .s)" Pop $0 ;left Pop $1 ;top Pop $2 ;right Pop $3 ;bottom Messagebox mb_ok "$$0:$0 $$1:$1 $$2:$2 $$3:$3" SectionEnd |
|
Последний раз редактировалось MKN, 03-11-2013 в 10:24. Отправлено: 09:53, 03-11-2013 | #693 |
Пользователь Сообщения: 136
|
Профиль | Отправить PM | Цитировать MKN, Вы меня, прямо, балуете, спасибо... Я не лентяй, просто у меня еще нет навыка в поиске информации. Буду изучать и, если что, рассчитываю еще на Ваш опыт...
А можно заставить окно инсталлятора открываться не в центре экрана, а по координатам, которые я укажу в той же системе, что и в вашем примере выше? |
Последний раз редактировалось Salmo, 03-11-2013 в 14:19. Отправлено: 14:11, 03-11-2013 | #694 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата Salmo:
!include "MUI2.nsh" !define MUI_CUSTOMFUNCTION_GUIINIT Welcome !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE English OutFile RepositionWindow_test.exe !define stRECT "(i, i, i, i) i" !define SPI_GETWORKAREA 0x0030 Function Welcome ; Создать RECT структуру. Внутри этой структуры координаты углов. ; Верхний левый угол определяется двумя координатами left и top. ; Нижний правый соответственно определяется двумя оставшимися координатами - right и bottom. System::Call "*${stRECT} .r1" ; Получить окно прямоугольника.Функция GetWindowRect отыскивает размеры рамки ограничивающей прямоугольник ;определяемого окна. Размеры даны в экранных координатах, которые расположены относительно левого верхнего угла экрана. System::Call "User32::GetWindowRect(i, i) i ($HWNDPARENT, r1) .r2" ; Получить координаты System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)" ; Рассчитать ширину / высоту нашего окна IntOp $2 $4 - $2 ; $2 - ширина IntOp $3 $5 - $3 ; $3 - высота ; Определить размер рабочего стола без панели задач System::Call "User32::SystemParametersInfo(i, i, i, i) i (${SPI_GETWORKAREA}, 0, r1, 0) .r4" ; Получить координаты System::Call "*$1${stRECT} (.r4, .r5, .r6, .r7)" System::Free $1 ; правую сторону экрана разделить на 4 IntOp $0 $6 / 4 IntOp $8 $2 / 4 IntOp $0 $0 - $8 ; нижнюю часть экрана разделить на 4 IntOp $1 $7 / 4 IntOp $8 $3 / 4 IntOp $1 $1 - $8 ;Установить новую позицию окна System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($HWNDPARENT, 0, $0, $1, 0, 0, 0x201)" FunctionEnd Section SectionEnd Цитата Salmo:
|
||
Отправлено: 15:14, 03-11-2013 | #695 |
Пользователь Сообщения: 136
|
Профиль | Отправить PM | Цитировать Цитата MKN:
|
|
Отправлено: 18:25, 03-11-2013 | #696 |
Старожил Сообщения: 176
|
Профиль | Отправить PM | Цитировать kotkovets, подскажите пожалуйста как такой батник выполнить командами nsis:
@Echo Off color 1e Title “Обновление Microsoft Office 2013 ::“Обновление Microsoft Office 2013 set "path=%SystemRoot%;%SystemRoot%\system32;%SystemRoot%\system32\wbem" reg export HKLM\Software\Policies\Microsoft\Windows\Installer "%temp%\installer.reg" reg add HKLM\Software\Policies\Microsoft\Windows\Installer /v MaxPatchCacheSize /t REG_DWORD /d 0 /f net stop msiserver cls for /f %%i in ('dir /b /O-s Updates\*.msp') do (Call :SetupUpd %%i) :SetupUpd echo “Обновление %1 Updates\%1 /qn /norestart GoTo :EOF |
Отправлено: 22:09, 04-11-2013 | #697 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата diakov:
Насчет команды запуска *.msp файлов на примере msi В $R9 - путь к файлу\*.msp В общем допиливайте опытным путем до рабочего состояния - примерно так... --- p.s и в конце предложите перезагрузиться.. |
|
------- Последний раз редактировалось kotkovets, 05-11-2013 в 01:09. Отправлено: 00:59, 05-11-2013 | #698 |
Старожил Сообщения: 152
|
Профиль | Отправить PM | Цитировать kotkovets, пересматриваю ваш код по установке устройств, но есть странная особенность установка\обновление идет только в том случае если устройство уже установленно, если же оно не установленно ничего не происходит. Тестировался нижеследущий код XP Professional - все ок, XP Home - установка не проходит, в чем может быть проблема, непонятно, буду благодарен если посмотрите...
!define ERROR_NO_SUCH_DEVINST -536870389 !define SPOST_NONE 0 !define SPOST_PATH 1 !define SPOST_URL 2 !define SP_COPY_DELETESOURCE 0x1 !define SP_COPY_REPLACEONLY 0x2 !define SP_COPY_NOOVERWRITE 0x8 !define SP_COPY_OEMINF_CATALOG_ONLY 0x40000 !define CM_LOCATE_DEVNODE_NORMAL 0x00000000 !define CM_REENUMERATE_NORMAL 0 !define InstallDriver "!insertmacro InstallDriverCall" !include "logiclib.nsh" !macro InstallDriverCall HID INFPATH INFDIR System::Store S Push "${INFDIR}" Push "${INFPATH}" Push "${HID}" DetailPrint "Rescan drivers..." System::Call "cfgmgr32::CM_Locate_DevNode(*i.r0, n, i${CM_LOCATE_DEVNODE_NORMAL}) i.r1" ${If} $1 <> 0 StrCpy $1 1 ${Else} System::Call "cfgmgr32::CM_Reenumerate_DevNode (ir0, i${CM_REENUMERATE_NORMAL}) i.r1" ${IfThen} $1 <> 0 ${|}StrCpy $1 2${|} ${EndIf} ${If} $1 = 0 DetailPrint "Installing the driver..." System::Call "newdev::UpdateDriverForPlugAndPlayDevices(i0, ts, tss, i0, *i0)?ei.s" Pop $0 IntCmp $0 ${ERROR_NO_SUCH_DEVINST} 0 +2 +2 DetailPrint "The device is not plugged in, cannot update the driver." ${If} $0 = 0 System::Call "setupapi::SetupCopyOEMInf(ts, ts, i${SPOST_PATH}, i0, i0, i0, *i0, tn)i.r0" IntCmp $0 1 0 +2 +2 DetailPrint "Istall driver success!" IntCmp $0 0 0 +2 +2 DetailPrint "Istall driver error!" ${EndIf} ${ElseIf} $1 = 1 DetailPrint "An error occurred while trying to get the device instance for the machine" ${ElseIf} $1 = 2 DetailPrint "An error occurred while trying to refresh the device list" ${EndIf} System::Store L !macroend OutFile InstDrv.exe ShowInstDetails show Section # ${InstallDriver} "HWID" "путь к inf файлу" "папка с дровами" ${InstallDriver} "ROOT\RDPDR" "$WINDIR\inf\machine.inf" "$WINDIR\inf" SectionEnd |
Последний раз редактировалось Limonica, 05-11-2013 в 01:44. Отправлено: 01:33, 05-11-2013 | #699 |
Старожил Сообщения: 176
|
Профиль | Отправить PM | Цитировать kotkovets, спаибо большое, и еще один вопрос, в справке сказано о команде nsExec::Exec для скрытного запуска консольных утилит, cmd и bat файлов, так вот можно запустить cmd файл, но только в видимом режиме и с невозможностью закрытия окна консоли, то есть что бы окно закрывалось уже когда батник завершит все свои дела. Можно воспользоваться ExecShell "open", но тогда как решить проблему невозможности закрытия окна cmd до завершения процесса?
|
Отправлено: 09:38, 05-11-2013 | #700 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|