PDA

Показать полную графическую версию : AutoIt Based Post-Install Wizard


Страниц : [1] 2

Nik_rus
20-08-2009, 22:01
Версия 1.2 - бета, done.
How-to для ини файла внутри - conf-readme.ini
Что реализовал смотрим снизу :)
Немного увеличелось время подгрузки - ModernMenuRaw.au3 громоздкий однако

*Now version*
1.2-beta

*Future list*

KillTimeOut
Прога для создания ini файла
Проверка на всякие ошибки - сделано по возможности
Трэй - менюшка, чтоб не смотря на окно можно было посмотреть что установилось \ сколько осталось и прочую инфу (с иконками менюшка !) - сделано
Собственно относительный просчет в % оставшегося \ сделанного - немного изврата и вуаля :)
Режим "тихий" , без гуи окна - сделано
Возможность выбора - показывать\не показывать трей - сделано
Возможность выбора устанавливаемых программ - сделано
Пауза при инстале
Настраиваемое место между чекбоксами - сделано
Смена шрифта (рамер, ширина,мод(2-Italic,4-Underlined,9-Strike), название фонта) - сделано
Ребут после инсталла - сделано

266903582
21-08-2009, 04:06
Писал давно что-то подобное для себя.
Выглядит примерно так:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$hKoeff=23;высота строки (Лень было делать 2 колонки, так что я просто уплотнил список...)
$path=where_am_I();Ищем букву диска, с которого запущена WPI
dim $Checkbox[50],$Label[50];массивы идентификаторов для гуя
$num_of_files=IniReadSectionNames($path&"\soft\il.ini");Читаем список софта
$Form1 = GUICreate("Йа устанавливалко", 272,$hKoeff*$num_of_files[0], 3, 3,-1,$WS_EX_TOPMOST);Рисуем окошко
for $i=1 to $num_of_files[0]
$Checkbox[$i]=GUICtrlCreateCheckbox("", 8, $i*$hKoeff-27, 17, 25);Рисуем чекбоксы
if IniRead($path&"\soft\il.ini",$num_of_files[$i],"status_install","")=1 Then GUICtrlSetState($Checkbox[$i],$GUI_CHECKED);Обязательные к установке программы получают прочеканные чекбоксы
$Label[$i]=GUICtrlCreateLabel($num_of_files[$i], 30, $i*$hKoeff-21, 225, 17);Рисуем метки для названий программ
Next
GUISetState(@SW_SHOW)

Sleep(10000)
for $i=1 to $num_of_files[0]
if GUICtrlRead($Checkbox[$i])=1 Then RunWait(IniRead($path&"\soft\il.ini",$num_of_files[$i],"path",""));Ставим программы из папки "soft" по списку из файла "il.ini" (Структура файла приведена ниже)
GUICtrlSetState($Checkbox[$i],$GUI_DISABLE);контролы установленных программ отмечаются как disabled (серыми становятся в списке)
GUICtrlSetState($Label[$i],$GUI_DISABLE)
Next

Func where_am_I()
$drv=DriveGetDrive('all')
for $i=1 to $drv[0]
if $drv[$i]<>'a:' And FileExists($drv[$i]&'\boot.bin') Then Return $drv[$i];Ищем файл-идентификатор на всех дисках и возвращаем его букву
Next
Exit
EndFunc

Структура файла il.ini:
[Название_программы]
path=Имя_файла.exe
status_install=1(Если 0 - чекбокс будет неотмеченным и программа по умолчанию не будет установлена)
P. S. Программы из списка должны быть самоустанавливающимися.

Nik_rus
21-08-2009, 11:05
У меня примерно так же :) тока массивы не фиксированные и скомпиленый он тоже работает как и не скомпиленый (т.е. в скрипте ниче менять не надо.
Тока вот вопрос : как бы отключить TreeView чтобы пользователь не мог ничего отмечать ? (у меня стиль TreeView = 0x100)
Если кто ответит хотя я сомневаюсь :) сделаю возможность выбора (пока только по порядку)
И еще надо бы его покрасивей сделать, видел UDF Icons, там можно задавать PNG - оч удобно и не пропадают.

266903582
21-08-2009, 14:45
Тока вот вопрос : как бы отключить TreeView чтобы пользователь не мог ничего отмечать ? »
А в чем проблема? GUICtrlSetState($TreeViewID,$GUI_DISABLE) гарантированно отключит элемент и ничего поменять не сможешь...

Nik_rus
21-08-2009, 15:04
Хе попробую, просто я @SW_DISABLE пробовал и не получалось :)

Блин, чета у меня не получается его отключить :( GUISetState($tree,$GUI_DISABLE)

266903582
21-08-2009, 16:12
GUICtrlSetState($tree,$GUI_DISABLE) !!!

Nik_rus
21-08-2009, 16:13
АААА, спасибо что просветил, я б в жизни не додумался :)

FlatX007
21-08-2009, 18:22
Да ещё WPI создаёт LOG во время установки ... если установка прервётся он начнёт ставить с того компонента который неуспел поставится.

Nik_rus
21-08-2009, 18:34
Да-да, это конечно нужно, но я пока над самой первой версией работаю, мне еще топать и топать до WPI :)
но я их перетопчу все ети wpi и прочие каки

Nik_rus
21-08-2009, 19:34
Собсно первая версия - налетай и круши :beta:

Medic84
21-08-2009, 20:30
:clapping: продолжай в том же духе.Должен конечно заметить, что инсталяторы сами по себе должны тихо устанавливаться я не собираюсь за вас это делать :P . »
Думаю можно использовать для инсталяторов ключи тихого режима :) Я думаю должны же работать :unsure:

sleep=время sleep между инсталяцией программ (однако учтите, что запускается все это запускается не через Run а через RunWait !) »
Нужно сделать RunWait. Потому что на разных компах проги ставятся по разному. И программы то разные...

SyDr
21-08-2009, 20:36
Medic84, ты не так понял. Там же написано, что RunWait. Sleep идёт как дополнительная пауза.

Как насчёт варианта добавить KillTimeout. Если к примеру программа не установилась за две минуты - прибить и запустить следующую.

Medic84
21-08-2009, 20:37
Medic84, ты не так понял »
Стар я стал и слеповат))))

Nik_rus
21-08-2009, 20:47
Кхм, насчет KillTimeOut - думаю вполне реально ! но наверное нужно будет для каждой программы свое - сравните Right Click Image Converter и фотошоп
кстати, сначала думал что заплюют и закидают т.к. в скрипте сложного ничего нет и каждый может такое сделать и прооочччч.
+ щас добавлю пункт "Что ожидается" :)
Кстати, такой вопрос - а если инсталятор в тихом режиме, то WinExist сработает ?
SyDr может подкинешь скрипт как по названию ехе-шника (ну или msi и проч) сделать этот самый таймаут ? :)

Medic84
21-08-2009, 21:50
Nik_rus, Я думаю может трей не надо делать? Я вообще предполагаю что программа будет запускаться через RunOnce. Учти там ничего нет. Ни панели, ни ярлыков. НИЧЕГО.....

FlatX007
22-08-2009, 07:15
У вас запись в INI файл производится слдеующим образом :

prog2=LPInstaller.exe
progn2=U3LaunchPad
Получается на одну программу 2 параметра!
А можно К ПРИМЕРУ вот так :
prog1=<mirc.exe><mIRC></SILENT /NOCANCEL /NORESTART>
И добавить в скрипт это : (получаем массив из N огоКолличества параметров) так же можно к примеру записать ключи запуска, и всё что душе угодно.

$param = IniRead("conf.ini", "Params", "prog1", 0)
$array = StringRegExp($param, '<(.*?)>', 3)
If (@error) Then MsgBox(64, "", "Нет совпадений")
For $i = 0 to UBound($array) - 1
MsgBox(0, "" & $i, $array[$i])
Next

И зачем картинка Зои из L4D ? (bg.png) - её же всё равно не видно ...

Nik_rus
22-08-2009, 10:30
Картинка просто так, надо же было поугарать :lol:
А вот StringRegExp - это, признаюсь, моя слабость... я ими ну никак не могу совладать :cry:
Но навеное придется так и сделать, и лазить в неизвестных дебрях :search:

Nik_rus
22-08-2009, 10:53
Блин, из-за регекспа вылезла такая бяка - придется проверять, задана ли переменная (в IniRead можно было задать стандартное)

Nik_rus
22-08-2009, 11:47
Ребят, помогите плз.
Вроде все работает, но когда я начинаю установку, элементы TreeView'а появляются по очереди, хотя я их заранее прорисовал.
Все из-за
GUICtrlSetState($treeprogs,$GUI_DISABLED)
если её убрать - все прекрасно...

crashtuak
22-08-2009, 12:04
Nik_rus, count=кол-во програм для инсталляции ет для цикла надо :)?




© OSzone.net 2001-2012