Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Begin2Fly
15-11-2013, 19:53
kotkovets, используется версия 3.0a1, юникод включен, на выходе что-то непонятное... Причём, на ANSI всё работает нормально.
!include "WinVer2.nsh"
Unicode true
Name "WinVer2 check"
OutFile "Check.exe"
Section main
HideWindow
SetAutoClose true
${WinVersion} $5
MessageBox MB_OK|MB_TOPMOST "Версия Windows: $5"
SectionEnd
http://images.vfl.ru/ii/1384530656/b65afcc3/3530555.png (http://images.vfl.ru/ii/1384530656/c8ca8d92/3530554.png) http://images.vfl.ru/ii/1384530658/47612f7a/3530558.png (http://images.vfl.ru/ii/1384530657/a329f76a/3530556.png) http://images.vfl.ru/ii/1384530659/2c7e0877/3530560.png (http://images.vfl.ru/ii/1384530658/b3069207/3530559.png)
kotkovets
15-11-2013, 20:25
Begin2Fly, косяк есть исправил:
http://forum.oszone.net/showpost.php?p=2239933
Begin2Fly
15-11-2013, 20:29
kotkovets, спасибо большое, теперь всё отработало корректно. Только подправьте расширение файла, а то скачивается с .nsi, а не с .nsh
косяк есть исправил: »
я же говорил про это, а меня никто не слушал :dont-know
Begin2Fly
16-11-2013, 05:00
*Тихо ненавижу 8.1*
Кто-нибудь знает, как можно зарегистрировать .dll, находящуюся в Program Files (x86) на 64-битной Windows 8.1? Пробовал всякое, но процесс просто висит в фоне.
Подскажите что не так делаю, при использовании плага Nsis7z, после выполнения команды
Nsis7z::ExtractWithDetails "Test.7z" "Распаковка: %s"
файлы распаковываются но все они по 0 байт.
Begin2Fly
16-11-2013, 15:09
diakov, пакуй в LZMA, а не LZMA2.
kotkovets
16-11-2013, 17:24
Кто-нибудь знает, как можно зарегистрировать .dll, находящуюся в Program Files (x86) на 64-битной Windows 8.1?..»
под админом через regsvr32.exe
Если нужно делаем перенаправление: подробности в файле ..\NSIS\Include\x64.nsh
Begin2Fly
16-11-2013, 20:14
под админом через regsvr32.exe
Если нужно делаем перенаправление: подробности в файле ..\NSIS\Include\x64.nsh »
Спасибо, но это не то. Как бы странно это не звучало, но проблема заключалась в том, что рядом с регистрируемой .dll находился определённый .exe-файл. Стоило его убрать и вуаля, всё работает. Спасибо за внимание, всем всего доброго.
проблема заключалась в том, что рядом с регистрируемой .dll находился определённый .exe-файл. Стоило его убрать и вуаля, всё работает »
Интересная связь... Это всё равно, что - DLL не регистрировалась, потому что на кухне горел свет. Свет потушили - DLL зарегистрировалась. :)
Vincent7
17-11-2013, 16:59
подскажите как запустить через execcmd или execdos приложение с параметрами. я не понял как это сделать
Vincent7,
ExecCmd::exec '"$SysDir\cmd" /c NET START PFNet' "" ""
Запускаем CMD с параметром /c NET START PFNET - пример запуска службы
Добрый день... Не думаю, что получу ответ, но... Применял с успехом код для поиска открытых окон приложений:
!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
Но столкнулся с тем, что этот код не обнаруживает явно открытое окно программы. Это же окно не видит Анвир. Для утилиты Spy++ или WndOwner проблем нет. А хотел увидеть и его дочерние окна... Есть еще варианты на NSIS?
код не обнаруживает явно открытое окно программы. »
Расшифруй - что значит явное ? Открытые окна и их дочерние - нормально определяет. Что за хитрое такое окно у тебя ?
Расшифруй - что значит явное ? »
Как я догадываюсь, это означает то, что окно точно есть и пользователь об этом знает, но при перечислении окон оно не обнаруживается
И такому поведению есть место, например, у меня тоже NSIS скрипт не находит через FindWindow окно "Kaspersky Internet Security" когда запущен антивирь, в то время как программа "InqSoft Window Scanner" явно даёт понять, что данное окно всё-таки существует и в своём списке его отображает...
Как я догадываюсь, это означает то, что окно точно есть и пользователь об этом знает, но при перечислении окон оно не обнаруживается » Спасибо за поддержку :) .... и более того, не просто знает, а видит перед собственным носом! Видимо это не случайность, а закономерность для подобных программ... А программа - 360 Internet Security.
Как я догадываюсь, это означает то, что окно точно есть и пользователь об этом знает, »
Разве можно задавать так вопрос, что надо догадываться о чём речь... :) Можно было бы сразу сказать - окно программы "360 Internet Security".
Может прграмма построена, так , что игнорируются API вызовы, "направленные" на её оконные формы и пр ? Всё же это антивирус... А вышеприведённый код, ведь API_шный...
Можно попробовать подойти к такой задаче по другому - или искать окно, принадлежащее процессу или использовать WMI
Разве можно задавать так вопрос, что надо догадываться о чём речь. »
Толковый словарь: явный - 1. Не скрываемый, не тайный, открытый; 2. Совершенно очевидный, ясный для всех.
Я не думал, что это слово вызовет затруднение... :)
или искать окно, принадлежащее процессу - поподробнее можно, пожалуйста.
Я не думал, что это слово вызовет затруднение... »
У меня, при явно открытых нескольких окнах и правильной работе кода по определению этих явных окон - твоё неопределяемое "явное" окно, явно вызывает вопросы. :) Потому необходима конкретика в вопросе.
или искать окно, принадлежащее процессу - поподробнее можно, пожалуйста. »
Если для одного известного процесса, то определить его PID, (на всяк случай найти доп потоки с помощью Thread32First / Thread32Next) затем использовать функции EnumThreadWindows() и EnumThreadWndProc
Если перебрать все окна ,созданные всеми имеющимися в данный момент, процессами, то сделать снимок процессов, разобраться с ним и для каждого
использовать функции EnumThreadWindows() и EnumThreadWndProc.
Как то так. Это много кода и гемора. Подробности знают наши гуру. :)
ps Найти "Window Title", зная имя процесса, можно с помощью малюсенькой утилитки CProcess. Она уже упоминалась здесь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC