Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
Доброго времени суток!
Господа, подскажите пожалуйста, как можно получит список логических дисков пользователя?
Raf-9600
05-09-2011, 15:37
Мой предыдущий вопрос касательно прогресс-бара, уже не актуален. Добрые люди с ру-боарда помогли! http://www.kolobok.us/smiles/light_skin/yahoo.gif
xXDx, как в простом инстале.
Gugle, ёксель моксель Raf-9600 кидал примеры страницу назад http://www.forum.oszone.ru/post-1217528-96.html
хэллоу, как у пользователя спросить информацию?
и эту информацию добавить к параметрам инсталла
не могу ничего найти наподобие Inputbox
подскажите как уместить 5 полей на странице либо добавить скроллбар?
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 системы? Если у кого будут идеи и мысли по этому вопросу, буду рад выслушать.
Гуру, помогите!
Поиск в google показал, что надо смотреть в реестр в ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
именно там собрана информация обо всех сетевых интерфейсах. Остался открытым вопрос как правильно отсортировать именно Ethernet адаптеры. Глядя на все это я предпологаю что надо пройтись по всем ключам DriverDesc расположенным в этой ветке и выбрать те, в которых встречается слово "Ethernet" и "Сетевая". Помогите, пожалуйста, правильно сделать запрос.
З.Ы.
Хотя может и по какому то другому ключу надо идти. Никак е могу найти закономерность. (((
Sollar, смотря в чём, если ты про "лиц соглашение" там скроль сама ставится.
Rikill, нет на CreateInputQueryPage после 5 Page.Add
возможно ли исходя из списка компонентов и типов в ini файле распределять разные задачи-компоненты по типам при инсталлировании?
дайте ссылку, пример, где происходит работа с ини файлом
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:
подскажите как уместить 5 полей на странице либо добавить скроллбар? »
да он вроде как сам появляется когда нужен, и на самолепных страницах тоже »
а ты попробуй, не появляется скролла
справку смотрел, на примерах лучше пойму
не очень ясно как поступать с зависимыми задачами, они же должны быть под основной
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/)
Ребята а есть ли в 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;
С 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.