PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [39] 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

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

vahe-91
16-11-2013, 00:39
косяк есть исправил: »
я же говорил про это, а меня никто не слушал :dont-know

Begin2Fly
16-11-2013, 05:00
*Тихо ненавижу 8.1*
Кто-нибудь знает, как можно зарегистрировать .dll, находящуюся в Program Files (x86) на 64-битной Windows 8.1? Пробовал всякое, но процесс просто висит в фоне.

diakov
16-11-2013, 14:12
Подскажите что не так делаю, при использовании плага 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-файл. Стоило его убрать и вуаля, всё работает. Спасибо за внимание, всем всего доброго.

MKN
16-11-2013, 20:56
проблема заключалась в том, что рядом с регистрируемой .dll находился определённый .exe-файл. Стоило его убрать и вуаля, всё работает »
Интересная связь... Это всё равно, что - DLL не регистрировалась, потому что на кухне горел свет. Свет потушили - DLL зарегистрировалась. :)

Vincent7
17-11-2013, 16:59
подскажите как запустить через execcmd или execdos приложение с параметрами. я не понял как это сделать

Salmo
17-11-2013, 18:20
Vincent7,
ExecCmd::exec '"$SysDir\cmd" /c NET START PFNet' "" ""
Запускаем CMD с параметром /c NET START PFNET - пример запуска службы

Salmo
19-11-2013, 17:49
Добрый день... Не думаю, что получу ответ, но... Применял с успехом код для поиска открытых окон приложений:

!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?

MKN
19-11-2013, 18:21
код не обнаруживает явно открытое окно программы. »
Расшифруй - что значит явное ? Открытые окна и их дочерние - нормально определяет. Что за хитрое такое окно у тебя ?

K.A.V.
19-11-2013, 19:56
Расшифруй - что значит явное ? »
Как я догадываюсь, это означает то, что окно точно есть и пользователь об этом знает, но при перечислении окон оно не обнаруживается
И такому поведению есть место, например, у меня тоже NSIS скрипт не находит через FindWindow окно "Kaspersky Internet Security" когда запущен антивирь, в то время как программа "InqSoft Window Scanner" явно даёт понять, что данное окно всё-таки существует и в своём списке его отображает...

Salmo
19-11-2013, 22:35
Как я догадываюсь, это означает то, что окно точно есть и пользователь об этом знает, но при перечислении окон оно не обнаруживается » Спасибо за поддержку :) .... и более того, не просто знает, а видит перед собственным носом! Видимо это не случайность, а закономерность для подобных программ... А программа - 360 Internet Security.

MKN
20-11-2013, 09:07
Как я догадываюсь, это означает то, что окно точно есть и пользователь об этом знает, »
Разве можно задавать так вопрос, что надо догадываться о чём речь... :) Можно было бы сразу сказать - окно программы "360 Internet Security".
Может прграмма построена, так , что игнорируются API вызовы, "направленные" на её оконные формы и пр ? Всё же это антивирус... А вышеприведённый код, ведь API_шный...
Можно попробовать подойти к такой задаче по другому - или искать окно, принадлежащее процессу или использовать WMI

Salmo
20-11-2013, 10:10
Разве можно задавать так вопрос, что надо догадываться о чём речь. »
Толковый словарь: явный - 1. Не скрываемый, не тайный, открытый; 2. Совершенно очевидный, ясный для всех.
Я не думал, что это слово вызовет затруднение... :)

или искать окно, принадлежащее процессу - поподробнее можно, пожалуйста.

MKN
20-11-2013, 10:16
Я не думал, что это слово вызовет затруднение... »
У меня, при явно открытых нескольких окнах и правильной работе кода по определению этих явных окон - твоё неопределяемое "явное" окно, явно вызывает вопросы. :) Потому необходима конкретика в вопросе.

MKN
20-11-2013, 10:48
или искать окно, принадлежащее процессу - поподробнее можно, пожалуйста. »
Если для одного известного процесса, то определить его PID, (на всяк случай найти доп потоки с помощью Thread32First / Thread32Next) затем использовать функции EnumThreadWindows() и EnumThreadWndProc
Если перебрать все окна ,созданные всеми имеющимися в данный момент, процессами, то сделать снимок процессов, разобраться с ним и для каждого
использовать функции EnumThreadWindows() и EnumThreadWndProc.
Как то так. Это много кода и гемора. Подробности знают наши гуру. :)

ps Найти "Window Title", зная имя процесса, можно с помощью малюсенькой утилитки CProcess. Она уже упоминалась здесь.




© OSzone.net 2001-2012