Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   AutoIt Based Post-Install Wizard (http://forum.oszone.net/showthread.php?t=148480)

Nik_rus 20-08-2009 22:01 1198771

AutoIt Based Post-Install Wizard
 
Вложений: 1
Версия 1.2 - бета, done.
How-to для ини файла внутри - conf-readme.ini
Что реализовал смотрим снизу :)
Немного увеличелось время подгрузки - ModernMenuRaw.au3 громоздкий однако

*Now version*
1.2-beta

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

266903582 21-08-2009 04:06 1199019

Писал давно что-то подобное для себя.
Выглядит примерно так:
Код:

#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 1199183

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

266903582 21-08-2009 14:45 1199380

Цитата:

Цитата Nik_rus
Тока вот вопрос : как бы отключить TreeView чтобы пользователь не мог ничего отмечать ? »

А в чем проблема? GUICtrlSetState($TreeViewID,$GUI_DISABLE) гарантированно отключит элемент и ничего поменять не сможешь...

Nik_rus 21-08-2009 15:04 1199393

Хе попробую, просто я @SW_DISABLE пробовал и не получалось :)

Блин, чета у меня не получается его отключить :(
Код:

GUISetState($tree,$GUI_DISABLE)

266903582 21-08-2009 16:12 1199450

GUICtrlSetState($tree,$GUI_DISABLE) !!!

Nik_rus 21-08-2009 16:13 1199452

АААА, спасибо что просветил, я б в жизни не додумался :)

FlatX007 21-08-2009 18:22 1199578

Да ещё WPI создаёт LOG во время установки ... если установка прервётся он начнёт ставить с того компонента который неуспел поставится.

Nik_rus 21-08-2009 18:34 1199589

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

Nik_rus 21-08-2009 19:34 1199634

Собсно первая версия - налетай и круши :beta:

Medic84 21-08-2009 20:30 1199673

:clapping: продолжай в том же духе.
Цитата:

Цитата Nik_rus
Должен конечно заметить, что инсталяторы сами по себе должны тихо устанавливаться я не собираюсь за вас это делать :P . »

Думаю можно использовать для инсталяторов ключи тихого режима :) Я думаю должны же работать :unsure:

Цитата:

Цитата Nik_rus
sleep=время sleep между инсталяцией программ (однако учтите, что запускается все это запускается не через Run а через RunWait !) »

Нужно сделать RunWait. Потому что на разных компах проги ставятся по разному. И программы то разные...

SyDr 21-08-2009 20:36 1199676

Medic84, ты не так понял. Там же написано, что RunWait. Sleep идёт как дополнительная пауза.

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

Medic84 21-08-2009 20:37 1199677

Цитата:

Цитата SyDr
Medic84, ты не так понял »

Стар я стал и слеповат))))

Nik_rus 21-08-2009 20:47 1199684

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

Medic84 21-08-2009 21:50 1199758

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

FlatX007 22-08-2009 07:15 1199969

У вас запись в 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 1200017

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

Nik_rus 22-08-2009 10:53 1200028

Блин, из-за регекспа вылезла такая бяка - придется проверять, задана ли переменная (в IniRead можно было задать стандартное)

Nik_rus 22-08-2009 11:47 1200061

Ребят, помогите плз.
Вроде все работает, но когда я начинаю установку, элементы TreeView'а появляются по очереди, хотя я их заранее прорисовал.
Все из-за
Код:

GUICtrlSetState($treeprogs,$GUI_DISABLED)
если её убрать - все прекрасно...

crashtuak 22-08-2009 12:04 1200069

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

Nik_rus 22-08-2009 12:28 1200084

Да, и чтоб массив правильно заполнить...

Nik_rus 22-08-2009 15:02 1200207

Все смотрим 1-вый пост, скоро версия 1.1 !

FlatX007 22-08-2009 16:03 1200263

Кстати для чтения из INI файла можно использовать IniReadSection, тогда вообще нет надобности писать номера ключей.

Key=Opera.exe
Key=AIMP2.exe

Nik_rus 22-08-2009 16:16 1200277

Запоролся с %
Мне нужно, чтобы тайтл окна сначала был например "AutoIt", а потом (после инсталляции 1 программы) становился например "10% - AutoIt", как бы это реализовать, никто не подскажет?
Просто пытался
Код:

WinSetTitle(WinGetTitle("Autoit"),"","10% - " & "AutoIt")
но почемуто после установки первой программы все прекрасно, а вот после второй - нет... почему же так ?

Medic84 22-08-2009 16:46 1200310

Цитата:

Цитата Nik_rus
Кстати, от картинок пришлось отказаться - они очень красивые, но мешают контролам, я остановился лишь на цвете. »

А прозрачность не пробовал делать у контроллов?

Nik_rus 22-08-2009 16:51 1200316

Да дело не в прозрачности, просто иногда они невольно перекрывают нужные контрола.
Ах да - я все-таки сделал % - хранится енто в тайтле
ждемс, уже выкладываю 1.1

FlatX007 22-08-2009 16:52 1200318

Цитата:

Цитата Nik_rus
почему же так ? »

Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Title = "Autoit"

$Form1 = GUICreate($Title, 262, 171, 192, 124)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            For $i = 0 To 100 Step 10
                WinSetTitle($Title, "", $Title & " - "& $i & " %")
                Sleep(1000)
            Next
            WinSetTitle($Title, "", $Title & " - "& " Ready !")
            Sleep (1000)
            Exit
    EndSwitch
WEnd


Nik_rus 22-08-2009 17:00 1200328

FlatX007, сделал немного по другому, имхо изврат но ты меня знаешь :) а твоим способом пробовал - почемуто у меня не выходит...
Код:

GUICreate("AutoIt)
AutoItWinSetTitle("AutoIt")
WinSetTitle(AutoItWinGetTitle(),"10% - AutoIt")
AutoItWinSetTitle("10% - AutoIt")

Во так вот :)
Все смотрим 1 топик - бета-релиз 1.1 !!! :beta:

Medic84 22-08-2009 17:02 1200332

Хоошо получилось :) Только между программами отступ больше сделать и Font сменить. Ну это потом. Красявости потом наводить будешь)))

Nik_rus 22-08-2009 17:08 1200339

Спасибо что отписался и потестил судя по всему кроме тебя всем лень\на надо :P
Насчет отступов - естественно сделаю (если такое возможно...)
А вот Font... думаю оставить это на совести юзверей, пусть сами задают

Medic84 22-08-2009 17:24 1200352

Цитата:

Цитата Nik_rus
Спасибо что отписался и потестил судя по всему кроме тебя всем лень\на надо :P »

Просто ищу не навороченый, легкий, малофайловый Установщик)))))

Nik_rus 22-08-2009 17:43 1200368

Выполнил что Medic84 ты там хотел, вроде ниче так вышло)))
Уф, сейчас работа над треем

Medic84 22-08-2009 19:51 1200529

Ну может покажешь сим сим? ))

Nik_rus 22-08-2009 20:16 1200555

Сим-сим осталось чуть-чуть :)

Medic84 22-08-2009 20:53 1200594

Да и еще. Как быть если программе потребуется перезагрузка?

Nik_rus 22-08-2009 21:11 1200611

Добавим, только щас с треем разберусь, вроде поддается :)

Nik_rus 22-08-2009 22:00 1200648

Внимание, все смотрим первый пост, 1.2 бета сделана, смотрим и радуемся менюшке в трее + еще паре фич

Medic84 22-08-2009 22:01 1200649

Если запускать Инсталл несколько раз(Придурковато, но ошибки нужно исправить все) то устанавливается несколько раз Dosen't Exists

Nik_rus 22-08-2009 22:05 1200654

Дааа, багов тут навалом, завтра займусь :search:


Время: 09:16.

Время: 09:16.
© OSzone.net 2001-