Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 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 147 [148] 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

Gugle
05-09-2011, 12:52
Доброго времени суток!
Господа, подскажите пожалуйста, как можно получит список логических дисков пользователя?

Raf-9600
05-09-2011, 15:37
Мой предыдущий вопрос касательно прогресс-бара, уже не актуален. Добрые люди с ру-боарда помогли! http://www.kolobok.us/smiles/light_skin/yahoo.gif

Rikill
05-09-2011, 16:53
xXDx, как в простом инстале.
Gugle, ёксель моксель Raf-9600 кидал примеры страницу назад http://www.forum.oszone.ru/post-1217528-96.html

Sollar
05-09-2011, 17:02
хэллоу, как у пользователя спросить информацию?
и эту информацию добавить к параметрам инсталла

не могу ничего найти наподобие Inputbox

Rikill
06-09-2011, 01:24
Sollar, Edit'ы в помощ.

Sollar
07-09-2011, 09:46
подскажите как уместить 5 полей на странице либо добавить скроллбар?

Gugle
07-09-2011, 10:46
Gugle, ёксель моксель Raf-9600 кидал примеры страницу назад http://www.forum.oszone.ru/post-1217528-96.html »
Спасибо большое. Пропустил это сообщение.

Вопрос про сетевые интерфейсы. В недавнем прошлом я интересовался как можно получить список сетевых интерфейсов, установленных на компе. В связи с чем был предложен некоторый скрипт, который ищет эти самые пресловутые интерфейсы. Ссылка на ответ (http://forum.oszone.net/post-1732224-2736.html), за что спасибо El Sanchez .
Но после некоторго тестирования, я обнаружил, что данный скрипт не выявляет всех интерфейсов, представленных в системе. Прикрепил скриншот рабочего стола. Работаю в w2008 server. Вопрос остается открытым для меня. Как определить все network adapters системы? Если у кого будут идеи и мысли по этому вопросу, буду рад выслушать.

Gugle
07-09-2011, 13:14
Гуру, помогите!

Поиск в google показал, что надо смотреть в реестр в ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
именно там собрана информация обо всех сетевых интерфейсах. Остался открытым вопрос как правильно отсортировать именно Ethernet адаптеры. Глядя на все это я предпологаю что надо пройтись по всем ключам DriverDesc расположенным в этой ветке и выбрать те, в которых встречается слово "Ethernet" и "Сетевая". Помогите, пожалуйста, правильно сделать запрос.

З.Ы.
Хотя может и по какому то другому ключу надо идти. Никак е могу найти закономерность. (((

Rikill
07-09-2011, 17:02
Sollar, смотря в чём, если ты про "лиц соглашение" там скроль сама ставится.

Sollar
07-09-2011, 17:35
Rikill, нет на CreateInputQueryPage после 5 Page.Add


возможно ли исходя из списка компонентов и типов в ini файле распределять разные задачи-компоненты по типам при инсталлировании?

дайте ссылку, пример, где происходит работа с ини файлом

Rikill
07-09-2011, 19:05
Sollar, в справке есть примеры работы с ini файлами без секции код (!) секция [INI]

R.i.m.s.k.y.
07-09-2011, 19:10
подскажите как уместить 5 полей на странице либо добавить скроллбар? »
да он вроде как сам появляется когда нужен, и на самолепных страницах тоже
возможно ли исходя из списка компонентов и типов в ini файле распределять разные задачи-компоненты по типам при инсталлировании?
дайте ссылку, пример, где происходит работа с ини файлом »
да возможно, см справку в инно по секции [INI], она не кусается

El Sanchez
07-09-2011, 22:39
данный скрипт не выявляет всех интерфейсов, представленных в системе »
Gugle, в WQL запросе есть условие WHERE IPEnabled=TRUE, т.е. поиск ведется активных интерфейсов, отключенные отсеиваются. Условие можно убрать из запроса, но тогда в массив попадет все, включая минипорты и адаптеры всех мастей.
выбрать те, в которых встречается слово "Ethernet" и "Сетевая" »
Gugle, тогда условие WHERE IPEnabled=TRUE замените на WHERE Description LIKE "%Ethernet%" OR Description LIKE "%Сетевая%", но это лишнее, имена интерфейсов получите, но IP, MAC отключенных нет.

Sollar
08-09-2011, 09:26
Цитата Sollar:
подскажите как уместить 5 полей на странице либо добавить скроллбар? »
да он вроде как сам появляется когда нужен, и на самолепных страницах тоже »
а ты попробуй, не появляется скролла

справку смотрел, на примерах лучше пойму
не очень ясно как поступать с зависимыми задачами, они же должны быть под основной

Gugle
08-09-2011, 16:03
Gugle, тогда условие WHERE IPEnabled=TRUE замените на WHERE Description LIKE "%Ethernet%" OR Description LIKE "%Сетевая%", но это лишнее, имена интерфейсов получите, но IP, MAC отключенных нет. »
Если убрать условие WHERE IPEnabled=TRUE, то туда действительно попадут адаптеры всех мастей. Это мне не надо.
Усли поставить условие WHERE Description LIKE "%Ethernet%" OR Description LIKE "%Сетевая%", отсеиваются (названия из картинки):
4_port_01
4_port_02
4_port_03
4_port_04
LAN_BASEBOARD_1
LAN_BASEBOARD_2
Local Area connection
Что бы они туда попали, надо в условие внести какое нить слово/фразу, которая есть в названии. Я думаю, что сами винды определяют адаптеры, которые надо отобразить (на картинке это Network Connections и Server Manager), немного по другому, а не через поле Description. Я так и не смогу выяснить как это делается. (((

Вот и спрашиваю на форуме, вдруг кто то сталкивался с проблемой, а может быть кто то просто посмотрев на "поля таблицы", определит как это можно сделать.
Мне надо, чтобы в установщике отображался то же самый список, что и в Network Connections / Server Manager. Очень надо. Пока я сам не могу догнаться как это сделать. То ли глуповат, то ли руки не так заточены (а может и все сразу).

Кстати, VPN сетевые адаптеры у меня так и не попали в список.

kindza811
08-09-2011, 21:28
как мне сделать такой инсталлятор? подскажите,вот мой скрипт http://rghost.ru/20901371
http://i28.fastpic.ru/big/2011/0908/03/762fce1db6795d3705a60eaeae3fcf03.png (http://fastpic.ru/)

Polsta
08-09-2011, 22:11
Ребята а есть ли в Inno Setup возможность записать значение в реестр следующим образом:

Допустим устанавливаем программу на диск С в папку Test, а в реестр нужно занести два значения

1-е это буква диска C
2-е это название папки в которую установили программу Test

[HKEY_LOCAL_MACHINE\SOFTWARE\Test program]
"Path"="C:\\"
"Directory"="Test"

Я знаю что переменная {app} хранит путь установки, а есть ли другая переменная которая хранит букву диска и название директории

insombia
08-09-2011, 22:21
kindza811 во первых выкладывай весь скрипт,во вторых есть много таких инсталяторов к примеру закос под шепарда,ну а в третих можно сделать все самому только тебе нужно будет:STS (http://narod.ru/disk/7844367001/STS_v.1.0.rar.html)
Модуль панели статуса для Inno Setup. Создает панель статуса в выбранном месте, для этого вам потребуется прописать всего несколько функций. Для отрисовки панели используется botva2.dll. Модуль пока только на русском языке. Readme как и в предыдущем модуле нет, но есть несколько примеров использования.
bass.dll (http://rghost.ru/3502324) и скрипт для растяжения изображения на весь экран

El Sanchez
08-09-2011, 23:53
Мне надо, чтобы в установщике отображался то же самый список, что и в Network Connections / Server Manager »
Gugle, переделал предыдущий скрипт, пришлось добавить еще класс Win32_NetworkAdapter:

[Code]
type
IP_ADDR_INFO = array of record
Name: String;
IPv4: String;
IPv6: String;
MAC: String;
end;

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
objSWbemLocator, objSWbemServices, objSWbemObjectSet, objSWbemObject, objRegExp, objRegExpMatches: Variant;
IndexCount, i: Byte;
strBuf, ptrnIPv4, ptrnIPv6: String;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objRegExp := CreateOleObject('VBScript.RegExp');
except
ShowExceptionMessage;
Exit;
end;
ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
ptrnIPv6 := //IPv6 regexp
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
'(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
'((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';

objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapter').Count;
objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Name,MACAddress FROM Win32_NetworkAdapter WHERE NetConnectionID!=NULL');

for i := 1 to IndexCount do
try
//check object in collection
objSWbemObjectSet.Item('Win32_NetworkAdapter.DeviceID="' + IntToStr(i) + '"').GetObjectText_;
strBuf := objSWbemServices.Get('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
//Name
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Name := objSWbemObjectSet.Item('Win32_NetworkAdapter.DeviceID="' + IntToStr(i) + '"').Properties_.Item('Name').Value;
//IPv4 address
objRegExp.Pattern := ptrnIPv4;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
end;
//IPv6 address
objRegExp.Pattern := ptrnIPv6;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
end;
//MAC
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].MAC := objSWbemObjectSet.Item('Win32_NetworkAdapter.DeviceID="' + IntToStr(i) + '"').Properties_.Item('MACAddress').Value;
except
end;
Result := (GetArrayLength(IPAddrInfo) > 0);
end;

procedure InitializeWizard();
var
i: Byte;
arr: IP_ADDR_INFO;
begin
if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
MsgBox(
'Name: ' + arr[i].Name + #13#10 +
'IPv4: ' + arr[i].IPv4 + #13#10 +
'IPv6: ' + arr[i].IPv6 + #13#10 +
'MAC: ' + arr[i].MAC, mbInformation, MB_OK);
end;

Sollar
09-09-2011, 10:40
С ini более-менее разобрался, все равно не понятно с зависимыми задачами, но это сейчас неважно
Интересует, возможно ли создание циклов в секции Types?
Можно ли ее заменить полностью функцией из кода? {code:gets} А не только Name: и Description: ?

Существует ли функция для определения количества секций в INI файле? Если нет, то как их можно подсчитать?

вот примерно то что я хочу сделать

function InitializeSetup(): Boolean;
begin
for I := 1 to [количество секций в ini-файле] do
begin
str:='org'+inttostr(i);
org[i] := GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
if GetIniString(str, 'ex1', 'Error', 'C:\временная\example.ini') = '1' then
s1 :=s1 +' ' + GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
if GetIniString(str, 'ex2', 'Error', 'C:\временная\example.ini') = '1' then
s2 :=s2 +' ' + GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
end;
Result := True;
end;

а затем в цикле вставить переменную org[i] в секцию types
[Types]
for i := 1 to [количество секций в ini-файле] do
Name: {code:gets|org[i]}; Description: {code:gets|org[i]}




© OSzone.net 2001-2012