Что нового

[Автоматизация] Автоматическая установка набора программ

vollez

Новичок
Сообщения
8
Репутация
0
Здравствуйте. Решил написать программу для автоматической установки набора программ. Всё вроде бы работает (по отдельности) но я просто не знаю (или не хватает фантазии) как придумать добавить автоустановку SP3 для XP первым пунктом установки. Всё застопорилось на настойке автозапусков и указателях на функции.
Код:
; Запускаем скрипт с админскими правами
#requireadmin

;указываем, что нужно использовать координаты окна программы, а не рабочего стола
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

;эти инклуды нужны для используемых нами функций
#include <GUIConstants.au3>
#include <file.au3>

;Графическая оболочка (Гуи)
$hGUI = GUICreate('Инсталлер', 200, 430)
$h_1 = GUICtrlCreateCheckbox('SP3', 10, 20, 190, 17)
$h_2 = GUICtrlCreateCheckbox('Обновление драйверов', 10, 40, 190, 17)
$h_3 = GUICtrlCreateCheckbox('WinRar x32', 10, 60, 190, 17)
$h_4 = GUICtrlCreateCheckbox('WinRar x64', 10, 80, 190, 17)
$h_5 = GUICtrlCreateCheckbox('Adobe Reader XI', 10, 100, 190, 17)
$h_6 = GUICtrlCreateCheckbox('Microsoft Office 2007', 10, 120, 190, 17)
$h_7 = GUICtrlCreateCheckbox('Adobe Photoshop CC 14', 10, 140, 100, 17)
$h_8 = GUICtrlCreateCheckbox('Reboot', 10, 180, 190, 17)
$hLabel = GUICtrlCreateLabel('Выберите и нажмите старт', 10, 380, 180, 17)
$hButtonGo = GUICtrlCreateButton('СТАРТ', 10, 400, 80, 25)
$hButtonQuit = GUICtrlCreateButton('ВЫХОД', 100, 400, 80, 25)
GUISetState()

;Проверка есть ли наш скрипт в авторане
If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", @ScriptName) Then
    MyFunc2()
Else
    Myfunc()
EndIf

;Установка программ
Func Myfunc()
        While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE Or $msg = $hButtonQuit
                Exit
            Case $msg = $hButtonGo
                GUISetState(@SW_DISABLE)
                If GUICtrlRead($h_1) = $GUI_UNCHECKED And GUICtrlRead($h_2) = $GUI_UNCHECKED And GUICtrlRead($h_3) = $GUI_UNCHECKED And GUICtrlRead($h_4) = $GUI_UNCHECKED And GUICtrlRead($h_5) = $GUI_UNCHECKED And GUICtrlRead($h_6) = $GUI_UNCHECKED And GUICtrlRead($h_7) = $GUI_UNCHECKED = $GUI_UNCHECKED And GUICtrlRead($h_8) = $GUI_UNCHECKED Then
                    MsgBox(0, 'Error', 'Ни одного пункта не выбрано!')
                Else
                    If GUICtrlRead($h_1) = $GUI_CHECKED Then
                        GUICtrlSetData($hLabel, 'Устанавливаем SP3')
Здесь должен быть код установки  SP3. Код приложен в конце. После окончания установки код должен продолжаться дальше.

                        GUICtrlSetData($hLabel, 'SP3 установлен')
                    EndIf
                    If GUICtrlRead($h_2) = $GUI_CHECKED Then
                        GUICtrlSetData($hLabel, 'Обновляем драйверы')
						Run("\Автоинсталл\Soft\DRPSu12\DriverPackSolution.exe")
						ControlClick('DriverPack Solution 12','Отмена','Button2')
                        GUICtrlSetData($hLabel, 'Драйверы обновлены')
                    EndIf
                    If GUICtrlRead($h_3) = $GUI_CHECKED Then
                         GUICtrlSetData($hLabel, 'Устанавливаем WinRar x32')
                        ; устанавливаем WinRar x32
                        Run("\Автоинсталл\Soft\winrar-x32-420ru.exe")
                        WinWaitActive("WinRAR 4.20 (русская 32-разрядная версия)")
						ControlClick('WinRAR 4.20 (русская 32-разрядная версия)','Установить','Button2')
						WinWaitActive("Настройка WinRAR")
						Send("{enter}")
						WinWaitActive("Установка WinRAR")
						ControlClick('Установка WinRAR','Готово','Button1')
						WinClose("WinRAR")
                        sleep(1000)
                        GUICtrlSetData($hLabel, 'WinRar x32 установлен')
                    EndIf
                    If GUICtrlRead($h_4) = $GUI_CHECKED Then
                        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x64')
                         ; устанавливаем WinRar x64
                        Run("\Автоинсталл\Soft\winrar-x64-420ru.exe")
                        WinWaitActive("WinRAR 4.20 (русская 64-разрядная версия)")
						ControlClick('WinRAR 4.20 (русская 64-разрядная версия)','Установить','Button2')
						WinWaitActive("Настройка WinRAR")
						Send("{enter}")
						WinWaitActive("Установка WinRAR")
						ControlClick('Установка WinRAR','Готово','Button1')
						WinClose("WinRAR")
                        sleep(1000)
                        GUICtrlSetData($hLabel, 'WinRar x64 установлен')
                    EndIf
                    If GUICtrlRead($h_5) = $GUI_CHECKED Then
                        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Reader XI')
						; устанавливаем Adobe Reader XI
                        RunWait("\Автоинсталл\Soft\Adobe Reader XI v11.0.10\Adobe Reader XI v11.0.10\Adobe.Reader.XI.v11.0.10.exe  /S /Q")
                        GUICtrlSetData($hLabel, 'Adobe Reader XI установлен')
                    EndIf
                    If GUICtrlRead($h_6) = $GUI_CHECKED Then
                        GUICtrlSetData($hLabel, 'Устанавливаем Microsoft Office 2007')
						RunWait("\Автоинсталл\Soft\office2007\SETUP.EXE")
						Sleep(1000)
                        GUICtrlSetData($hLabel, 'Microsoft Office 2007 установлен')
                    EndIf
                    If GUICtrlRead($h_7) = $GUI_CHECKED Then
						GUICtrlSetData($hLabel, 'Устанавливаем Adobe Photoshop CC 14')
						RunWait("\Автоинсталл\Soft\Adobe Photoshop CC 14.1.2 Final RePack\PhotoshopCC-14.1.2.exe /S /R")
						Sleep(1000)
                        GUICtrlSetData($hLabel, 'Adobe Photoshop CC 14 установлен')
                    EndIf
                    If GUICtrlRead($h_8) = $GUI_CHECKED Then
						GUICtrlSetData($hLabel, 'Reboot')
						Shutdown(2)
                        GUICtrlSetData($hLabel, 'Reboot')
                    EndIf
                    MsgBox(0, 'Done!', 'Все выбранные программы установленны')
                    GUICtrlSetData($hLabel, 'Выберите софт и нажмите GO!')
                EndIf
                GUISetState(@SW_ENABLE)
        EndSelect
    WEnd
EndFunc   ;==>Myfunc

Код установки SP3
Func fragment()
   While 1
   RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Path1", "REG_SZ", @ScriptFullPath)
   RunWait("WindowsXP-KB936929-SP3-x86-RUS /passive /forcerestart")
   WEnd
EndFunc
Func fragment2()
   While 1
   Sleep(30000)
   RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Path1")
   Shutdown(2)
WEnd
EndFunc
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Я не совсем понял что ты хочешь? Вызывай функцию с установкой SP3 там где ты хочешь.
 
Автор
V

vollez

Новичок
Сообщения
8
Репутация
0
Как мне сказал препод у которого я скачал обновление после установки необходимо сделать 2 перезагрузки и только потом устанавливать дрова и программы. Проблема с реализацией этих перезагрузок. Отдельный скрипт установки sp3 работает отлично, а как потом из него вернуться в этот и продолжить выполнение я не знаю.
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Можно попробовать на время установки писать лог файл и при перезагрузке читать с него с какой функций продолжить скрипт
я с телефона сижу может где ошибся но думаю смысл поймёшь
Код:
; Запускаем скрипт с админскими правами
#requireadmin

;эти инклуды нужны для используемых нами функций
#include <GUIConstants.au3>
#include <file.au3>

Global $h_1, $h_2, $h_3, $h_4 ,$h_5 ,$h_6 ,$h_7 ,$h_8, $hLabel, $hButtonGo, $hButtonQuit, $Rebut

;указываем, что нужно использовать координаты окна программы, а не рабочего стола
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

$sPath_ini = @ScriptDir & "Test.ini"

$Rebut = IniRead($sPath_ini, "Section", "Key", "Error")

If $Rebut = "Rebut" Then
    IniWrite("test.ini", "Section", "Key", "NoRebut")
    Shutdown(2)
Else
    GUI()
EndIf

Func GUI()
    ;Графическая оболочка (Гуи)
    $hGUI = GUICreate('Инсталлер', 200, 430)
    $h_1 = GUICtrlCreateCheckbox('SP3', 10, 20, 190, 17)
    $h_2 = GUICtrlCreateCheckbox('Обновление драйверов', 10, 40, 190, 17)
    $h_3 = GUICtrlCreateCheckbox('WinRar x32', 10, 60, 190, 17)
    $h_4 = GUICtrlCreateCheckbox('WinRar x64', 10, 80, 190, 17)
    $h_5 = GUICtrlCreateCheckbox('Adobe Reader XI', 10, 100, 190, 17)
    $h_6 = GUICtrlCreateCheckbox('Microsoft Office 2007', 10, 120, 190, 17)
    $h_7 = GUICtrlCreateCheckbox('Adobe Photoshop CC 14', 10, 140, 100, 17)
    $h_8 = GUICtrlCreateCheckbox('Reboot', 10, 180, 190, 17)
    $hLabel = GUICtrlCreateLabel('Выберите и нажмите старт', 10, 380, 180, 17)
    $hButtonGo = GUICtrlCreateButton('СТАРТ', 10, 400, 80, 25)
    $hButtonQuit = GUICtrlCreateButton('ВЫХОД', 100, 400, 80, 25)

    GUISetState()

	If IniRead($sPath_ini, "Section", "1", "Error") = 1 Then
		GUICtrlSetState($h_1, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "2", "Error") = 1 Then
		GUICtrlSetState($h_2, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "3", "Error") = 1 Then
		GUICtrlSetState($h_3, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "4", "Error") = 1 Then
		GUICtrlSetState($h_4, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "5", "Error") = 1 Then
		GUICtrlSetState($h_5, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "6", "Error") = 1 Then
		GUICtrlSetState($h_6, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "7", "Error") = 1 Then
		GUICtrlSetState($h_7, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "8", "Error") = 1 Then
		GUICtrlSetState($h_8, $GUI_CHECKED)
	EndIf
	If IniRead($sPath_ini, "Section", "Start", "Error") = 1 Then
		StartFunc()
	EndIf

    ;Проверка есть ли наш скрипт в авторане
    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", @ScriptName) Then
        MyFunc()
    Else
        Myfunc1()
    EndIf
EndFunc

;Установка программ
Func Myfunc()
        While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE Or $msg = $hButtonQuit
                Exit
            Case $msg = $hButtonGo
                GUISetState(@SW_DISABLE)
				; добавить скрипт в автозапуск
				If GUICtrlRead($h_1) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "1", "1")
				EndIf
				If GUICtrlRead($h_2) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "2", "1")
				EndIf
				If GUICtrlRead($h_3) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "3", "1")
				EndIf
				If GUICtrlRead($h_4) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "4", "1")
				EndIf
				If GUICtrlRead($h_5) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "5", "1")
				EndIf
				If GUICtrlRead($h_6) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "6", "1")
				EndIf
				If GUICtrlRead($h_7) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "7", "1")
				EndIf
				If GUICtrlRead($h_8) = $GUI_CHECKED Then
					IniWrite($sPath_ini, "Section", "8", "1")
				EndIf
				IniWrite($sPath_ini, "Section", "Start", "1")

                StartInstall()

                GUISetState(@SW_ENABLE)
        EndSelect
    WEnd
EndFunc   ;==>Myfunc

Func StartInstall()
    If GUICtrlRead($h_1) = $GUI_UNCHECKED And GUICtrlRead($h_2) = $GUI_UNCHECKED And GUICtrlRead($h_3) = $GUI_UNCHECKED And GUICtrlRead($h_4) = $GUI_UNCHECKED And GUICtrlRead($h_5) = $GUI_UNCHECKED And GUICtrlRead($h_6) = $GUI_UNCHECKED And GUICtrlRead($h_7) = $GUI_UNCHECKED = $GUI_UNCHECKED And GUICtrlRead($h_8) = $GUI_UNCHECKED Then
        MsgBox(0, 'Error', 'Ни одного пункта не выбрано!')
    Else
        If GUICtrlRead($h_1) = $GUI_CHECKED Then
			IniWrite($sPath_ini, "Section", "Key", "Rebut")
			fragment()
        EndIf
        StartFunc()
    EndIf
EndFunc ; ==> StartInstall

Func StartFunc()
	GUICtrlSetData($hLabel, 'SP3 установлен')
    If GUICtrlRead($h_2) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Обновляем драйверы')
        Run("\Автоинсталл\Soft\DRPSu12\DriverPackSolution.exe")
        ControlClick('DriverPack Solution 12','Отмена','Button2')
        GUICtrlSetData($hLabel, 'Драйверы обновлены')
    EndIf
    If GUICtrlRead($h_3) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x32')
        ; устанавливаем WinRar x32
        Run("\Автоинсталл\Soft\winrar-x32-420ru.exe")
        WinWaitActive("WinRAR 4.20 (русская 32-разрядная версия)")
        ControlClick('WinRAR 4.20 (русская 32-разрядная версия)','Установить','Button2')
        WinWaitActive("Настройка WinRAR")
        Send("{enter}")
        WinWaitActive("Установка WinRAR")
        ControlClick('Установка WinRAR','Готово','Button1')
        WinClose("WinRAR")
        sleep(1000)
        GUICtrlSetData($hLabel, 'WinRar x32 установлен')
    EndIf
    If GUICtrlRead($h_4) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x64')
        ; устанавливаем WinRar x64
        Run("\Автоинсталл\Soft\winrar-x64-420ru.exe")
        WinWaitActive("WinRAR 4.20 (русская 64-разрядная версия)")
        ControlClick('WinRAR 4.20 (русская 64-разрядная версия)','Установить','Button2')
        WinWaitActive("Настройка WinRAR")
        Send("{enter}")
        WinWaitActive("Установка WinRAR")
        ControlClick('Установка WinRAR','Готово','Button1')
        WinClose("WinRAR")
        sleep(1000)
        GUICtrlSetData($hLabel, 'WinRar x64 установлен')
    EndIf
    If GUICtrlRead($h_5) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Reader XI')
        ; устанавливаем Adobe Reader XI
        RunWait("\Автоинсталл\Soft\Adobe Reader XI v11.0.10\Adobe Reader XI v11.0.10\Adobe.Reader.XI.v11.0.10.exe  /S /Q")
        GUICtrlSetData($hLabel, 'Adobe Reader XI установлен')
    EndIf
    If GUICtrlRead($h_6) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Microsoft Office 2007')
        RunWait("\Автоинсталл\Soft\office2007\SETUP.EXE")
        Sleep(1000)
        GUICtrlSetData($hLabel, 'Microsoft Office 2007 установлен')
    EndIf
    If GUICtrlRead($h_7) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Photoshop CC 14')
        RunWait("\Автоинсталл\Soft\Adobe Photoshop CC 14.1.2 Final RePack\PhotoshopCC-14.1.2.exe /S /R")
        Sleep(1000)
        GUICtrlSetData($hLabel, 'Adobe Photoshop CC 14 установлен')
    EndIf
    If GUICtrlRead($h_8) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Reboot')
        Shutdown(2)
        GUICtrlSetData($hLabel, 'Reboot')
    EndIf
        MsgBox(0, 'Done!', 'Все выбранные программы установленны')
		FileDelete($sPath_ini)
        GUICtrlSetData($hLabel, 'Выберите софт и нажмите GO!')
EndFunc ; ==> StartFunc

;Код установки SP3
Func fragment()
	GUICtrlSetData($hLabel, 'Устанавливаем SP3')
	RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Path1", "REG_SZ", @ScriptFullPath)
	RunWait("WindowsXP-KB936929-SP3-x86-RUS /passive /forcerestart")
	Shutdown(2) ; reset
EndFunc ; ==> fragment()

Func fragment2()
   While 1
   Sleep(30000)
   RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Path1")
   Shutdown(2)
WEnd
EndFunc


Добавлено:
Сообщение автоматически объединено:

Переделал вроде теперь должно работать.
 
Автор
V

vollez

Новичок
Сообщения
8
Репутация
0
При запуске теперь сразу пишет что выбранные программы установлены.
А разве после установки программы значение из ini не должно удаляться?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
vollez [?]
после установки необходимо сделать 2 перезагрузки и только потом устанавливать дрова и программы.
Можно сделать примерно по такой схеме (работает только скомпилированный скрипт).
Код:
If $CmdLine[0] Then
	Switch $CmdLine[1]
		Case '/AfterSP3'
			MsgBox(64, 'Info', 'Первая перезагрузка после установки SP3')
			MsgBox(64, 'Info', 'Устанавливаем драйвера')
			RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce', @ScriptName, 'REG_SZ', '"' & @ScriptFullPath & '" /Next')
			Shutdown(2)
		Case '/Next'
			MsgBox(64, 'Info', 'Вторая перезагрузка после установки драйверов')
			MsgBox(64, 'Info', 'Устанавливаем программы')
	EndSwitch
Else
	MsgBox(64, 'Info', 'Устанавливаем SP3 (если надо)')
	RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce', @ScriptName, 'REG_SZ', '"' & @ScriptFullPath & '" /AfterSP3')
	Shutdown(2)
EndIf
Также можно предусмотреть ключ автоматической установки.

PS
Скрипты определения установленных систем, версий SP и программ есть на форуме.
 
Автор
V

vollez

Новичок
Сообщения
8
Репутация
0
Также можно предусмотреть ключ автоматической установки.
Не очень понял. Тут почти все программы устанавливаются с ключом автоустановки. Проблема в том чтобы настроить запуск установки выбранных программ после перезагрузки.Примерно последовательность должна быть такая:
1. запуск приложения и выбор программ.
2. перезагрузка после установки SP3
3. установка остальных программ выбранных в первом пункте
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
vollez [?]
Также можно предусмотреть ключ автоматической установки.
Не очень понял.
Я имею в виду следующее:
1. Если скрипт запускается первый раз без ключа:
1.1. Открывается окно, где пользователь выбирает то, что хочет установить. Выбранные программы пишутся, например, в ини-файл.
1.2. Проверка и установка SP (если нужно), первая перезагрузка.
1.3. Установка драйверов, вторая перезагрузка.
1.4. Установка выбранных (прочитанных из ини-файла) программ. Удаление ини-файла. Если нужна, то последняя перезагрузка.

2. Если скрипт запускается первый раз, например, с ключом /avto.
2.1 Нет окна, в ини-файл пишутся программы по умолчанию (см. п.2.4.).
2.2. Проверка и установка SP (если нужно), первая перезагрузка.
2.3. Установка драйверов, вторая перезагрузка.
2.4. Установка, например, всех программ или только необходимого минимума (как Вы сами предусмотрите в скрипте). Удаление ини-файла. Если нужна, то последняя перезагрузка.

Схема реализации всего этого есть в моем предыдущем ответе и в ответе Ksaan`a.
 

Ksaan

Знающий
Сообщения
207
Репутация
15
vollez сказал(а):
При запуске теперь сразу пишет что выбранные программы установлены.
А разве после установки программы значение из ini не должно удаляться?
Он не завершает скрипт сразу при перезагрузке, попробуй зациклить функцию
Код:
Func fragment()
    GUICtrlSetData($hLabel, 'Устанавливаем SP3')
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce", "Path1", "REG_SZ", @ScriptFullPath)
    RunWait("WindowsXP-KB936929-SP3-x86-RUS /passive /forcerestart")
    Shutdown(2) ; reset
	While 1
		Sleep(100)
	WEnd
EndFunc ; ==> fragment()

P.S Только я кто его знает как у всех но у меня скрипт сразу создаёт ini если скрипт на рабочем столе лежит
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ksaan,
ИМХО, лучше писать в реестр в раздел ...\RunOnce, а не в ...\Run, так как не нужно будет в последствии удалять эти записи.


Добавлено:
Сообщение автоматически объединено:

Ksaan [?]
кто его знает как у всех но у меня скрипт сразу создаёт ini если скрипт на рабочем столе лежит
Ksaan [?]
У Вас нет обратного слеша перед Test.ini.


Добавлено:
Сообщение автоматически объединено:

vollez,
Могу еще посоветовать посмотреть этот раздел: Наборы обновлений для Windows XP/2003/Windows 7. ИМХО, там есть все, что Вам нужно.
 
Автор
V

vollez

Новичок
Сообщения
8
Репутация
0
Всё понял. Идея с параметром отличная возьму на заметку для дальнейшего развития. Сейчас бы привести в рабочее состояние скрипт который предложил Ksaan. Я его немного изменил. Вот что получилось. Установка программ по отдельности в нём работает, но вся проблема в том что путаюсь в автозапусках и правильно их расставить у меня не получается.

Код:
; Запускаем скрипт с админскими правами
#requireadmin

;эти инклуды нужны для используемых нами функций
#include <GUIConstants.au3>
#include <file.au3>

Global $h_1, $h_2, $h_3, $h_4 ,$h_5 ,$h_6 ,$h_7 ,$h_8, $hLabel, $hButtonGo, $hButtonQuit, $Rebut

;указываем, что нужно использовать координаты окна программы, а не рабочего стола
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

$sPath_ini = @ScriptDir & "\Test.ini"

$Rebut = IniRead($sPath_ini, "Section", "Key", "Error")

If $Rebut = "Rebut" Then
    IniWrite("test.ini", "Section", "Key", "NoRebut")
Else
    GUI()
EndIf

Func GUI()
    ;Графическая оболочка (Гуи)
    $hGUI = GUICreate('Инсталлер', 200, 430)
    $h_1 = GUICtrlCreateCheckbox('SP3', 10, 20, 190, 17)
    $h_2 = GUICtrlCreateCheckbox('Обновление драйверов', 10, 40, 190, 17)
    $h_3 = GUICtrlCreateCheckbox('WinRar x32', 10, 60, 190, 17)
    $h_4 = GUICtrlCreateCheckbox('WinRar x64', 10, 80, 190, 17)
    $h_5 = GUICtrlCreateCheckbox('Adobe Reader XI', 10, 100, 190, 17)
    $h_6 = GUICtrlCreateCheckbox('Microsoft Office 2007', 10, 120, 190, 17)
    $h_7 = GUICtrlCreateCheckbox('Adobe Photoshop CC 14', 10, 140, 100, 17)
    $h_8 = GUICtrlCreateCheckbox('Reboot', 10, 180, 190, 17)
    $hLabel = GUICtrlCreateLabel('Выберите и нажмите старт', 10, 380, 180, 17)
    $hButtonGo = GUICtrlCreateButton('СТАРТ', 10, 400, 80, 25)
    $hButtonQuit = GUICtrlCreateButton('ВЫХОД', 100, 400, 80, 25)

    GUISetState()

    If IniRead($sPath_ini, "Section", "1", "Error") = 1 Then
        GUICtrlSetState($h_1, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "2", "Error") = 1 Then
        GUICtrlSetState($h_2, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "3", "Error") = 1 Then
        GUICtrlSetState($h_3, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "4", "Error") = 1 Then
        GUICtrlSetState($h_4, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "5", "Error") = 1 Then
        GUICtrlSetState($h_5, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "6", "Error") = 1 Then
        GUICtrlSetState($h_6, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "7", "Error") = 1 Then
        GUICtrlSetState($h_7, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "8", "Error") = 1 Then
        GUICtrlSetState($h_8, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "Start", "Error") = 1 Then
        StartFunc()
    EndIf


EndFunc

;Установка программ
Func Myfunc()
        While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE Or $msg = $hButtonQuit
                Exit
            Case $msg = $hButtonGo
                GUISetState(@SW_DISABLE)
                ; добавить скрипт в автозапуск
				If GUICtrlRead($h_1) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "1", "1")
                EndIf
                If GUICtrlRead($h_2) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "2", "1")
                EndIf
                If GUICtrlRead($h_3) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "3", "1")
                EndIf
                If GUICtrlRead($h_4) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "4", "1")
                EndIf
                If GUICtrlRead($h_5) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "5", "1")
                EndIf
                If GUICtrlRead($h_6) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "6", "1")
                EndIf
                If GUICtrlRead($h_7) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "7", "1")
                EndIf
                If GUICtrlRead($h_8) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "8", "1")
                EndIf
                IniWrite($sPath_ini, "Section", "Start", "1")

                StartInstall()

                GUISetState(@SW_ENABLE)
        EndSelect
    WEnd
 EndFunc   ;==>Myfunc

 ;Проверка есть ли наш скрипт в авторане
    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", @ScriptName) Then
        StartFunc()
    Else
        myfunc()
    EndIf

Func StartInstall()
    If GUICtrlRead($h_1) = $GUI_UNCHECKED And GUICtrlRead($h_2) = $GUI_UNCHECKED And GUICtrlRead($h_3) = $GUI_UNCHECKED And GUICtrlRead($h_4) = $GUI_UNCHECKED And GUICtrlRead($h_5) = $GUI_UNCHECKED And GUICtrlRead($h_6) = $GUI_UNCHECKED And GUICtrlRead($h_7) = $GUI_UNCHECKED = $GUI_UNCHECKED And GUICtrlRead($h_8) = $GUI_UNCHECKED Then
        MsgBox(0, 'Error', 'Ни одного пункта не выбрано!')
    Else
        If GUICtrlRead($h_1) = $GUI_CHECKED Then
	    fragment()
        EndIf
    EndIf
EndFunc ; ==> StartInstall

Func StartFunc()
    GUICtrlSetData($hLabel, 'SP3 установлен')
	If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Path1") then
	RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Path1")
	EndIf
    If GUICtrlRead($h_2) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Обновляем драйверы')
        Run("\Автоинсталл\Soft\DRPSu12\DriverPackSolution.exe")
        ControlClick('DriverPack Solution 12','Отмена','Button2')
        GUICtrlSetData($hLabel, 'Драйверы обновлены')
    EndIf
    If GUICtrlRead($h_3) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x32')
        ; устанавливаем WinRar x32
        Run("\Автоинсталл\Soft\winrar-x32-420ru.exe")
        WinWaitActive("WinRAR 4.20 (русская 32-разрядная версия)")
        ControlClick('WinRAR 4.20 (русская 32-разрядная версия)','Установить','Button2')
        WinWaitActive("Настройка WinRAR")
        Send("{enter}")
        WinWaitActive("Установка WinRAR")
        ControlClick('Установка WinRAR','Готово','Button1')
		Sleep(1000)
		WinWaitActive("WinRAR")
        WinClose("WinRAR")
        sleep(1000)
        GUICtrlSetData($hLabel, 'WinRar x32 установлен')
    EndIf
    If GUICtrlRead($h_4) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x64')
        ; устанавливаем WinRar x64
        Run("\Автоинсталл\Soft\winrar-x64-420ru.exe")
        WinWaitActive("WinRAR 4.20 (русская 64-разрядная версия)")
        ControlClick('WinRAR 4.20 (русская 64-разрядная версия)','Установить','Button2')
        WinWaitActive("Настройка WinRAR")
        Send("{enter}")
        WinWaitActive("Установка WinRAR")
        ControlClick('Установка WinRAR','Готово','Button1')
		Sleep(1000)
        WinWaitActive("WinRAR")
		WinClose("WinRAR")
        sleep(1000)
        GUICtrlSetData($hLabel, 'WinRar x64 установлен')
    EndIf
    If GUICtrlRead($h_5) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Reader XI')
        ; устанавливаем Adobe Reader XI
        RunWait("\Автоинсталл\Soft\Adobe Reader XI v11.0.10\Adobe Reader XI v11.0.10\Adobe.Reader.XI.v11.0.10.exe  /S /Q")
        GUICtrlSetData($hLabel, 'Adobe Reader XI установлен')
    EndIf
    If GUICtrlRead($h_6) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Microsoft Office 2007')
        RunWait("\Автоинсталл\Soft\office2007\SETUP.EXE")
        Sleep(1000)
        GUICtrlSetData($hLabel, 'Microsoft Office 2007 установлен')
    EndIf
    If GUICtrlRead($h_7) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Photoshop CC 14')
        RunWait("\Автоинсталл\Soft\Adobe Photoshop CC 14.1.2 Final RePack\PhotoshopCC-14.1.2.exe /S /R")
        Sleep(1000)
        GUICtrlSetData($hLabel, 'Adobe Photoshop CC 14 установлен')
    EndIf
    If GUICtrlRead($h_8) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Reboot')
        Shutdown(2)
        GUICtrlSetData($hLabel, 'Reboot')
	 EndIf
	    RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
        MsgBox(0, 'Done!', 'Все выбранные программы установленны')
        FileDelete($sPath_ini)
        GUICtrlSetData($hLabel, 'Выберите софт и нажмите GO!')
EndFunc ; ==> StartFunc

;Код установки SP3
Func fragment()
    GUICtrlSetData($hLabel, 'Устанавливаем SP3')
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", @ScriptFullPath)
    RunWait("\Автоинсталл\Soft\WindowsXP-KB936929-SP3-x86-RUS /passive /forcerestart") ;параметр forcerestart автоматически перезагружает пк 
EndFunc ; ==> fragment()
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Ну всё я у себя уже протестировал: при выборе SP3 будет 2 перезагрузки и продолжение установки программ
Скрипт откомпелируй
Код:
; Запускаем скрипт с админскими правами
#requireadmin

;эти инклуды нужны для используемых нами функций
#include <GUIConstants.au3>
#include <file.au3>

Global $h_1, $h_2, $h_3, $h_4 ,$h_5 ,$h_6 ,$h_7 ,$h_8, $hLabel, $hButtonGo, $hButtonQuit, $Rebut

;указываем, что нужно использовать координаты окна программы, а не рабочего стола
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

$sPath_ini = @ScriptDir & "\Test.ini"

$Rebut = IniRead($sPath_ini, "Section", "Key", "Error")

If $Rebut = "Rebut" Then
    IniWrite($sPath_ini, "Section", "Key", "NoRebut")
	Sleep(1000)
	Shutdown(2)
Else
    GUI()
EndIf

Func GUI()
    ;Графическая оболочка (Гуи)
    $hGUI = GUICreate('Инсталлер', 200, 430)
    $h_1 = GUICtrlCreateCheckbox('SP3', 10, 20, 190, 17)
    $h_2 = GUICtrlCreateCheckbox('Обновление драйверов', 10, 40, 190, 17)
    $h_3 = GUICtrlCreateCheckbox('WinRar x32', 10, 60, 190, 17)
    $h_4 = GUICtrlCreateCheckbox('WinRar x64', 10, 80, 190, 17)
    $h_5 = GUICtrlCreateCheckbox('Adobe Reader XI', 10, 100, 190, 17)
    $h_6 = GUICtrlCreateCheckbox('Microsoft Office 2007', 10, 120, 190, 17)
    $h_7 = GUICtrlCreateCheckbox('Adobe Photoshop CC 14', 10, 140, 100, 17)
    $h_8 = GUICtrlCreateCheckbox('Reboot', 10, 180, 190, 17)
    $hLabel = GUICtrlCreateLabel('Выберите и нажмите старт', 10, 380, 180, 17)
    $hButtonGo = GUICtrlCreateButton('СТАРТ', 10, 400, 80, 25)
    $hButtonQuit = GUICtrlCreateButton('ВЫХОД', 100, 400, 80, 25)

    GUISetState()

    If IniRead($sPath_ini, "Section", "1", "Error") = 1 Then
        GUICtrlSetState($h_1, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "2", "Error") = 1 Then
        GUICtrlSetState($h_2, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "3", "Error") = 1 Then
        GUICtrlSetState($h_3, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "4", "Error") = 1 Then
        GUICtrlSetState($h_4, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "5", "Error") = 1 Then
        GUICtrlSetState($h_5, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "6", "Error") = 1 Then
        GUICtrlSetState($h_6, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "7", "Error") = 1 Then
        GUICtrlSetState($h_7, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "8", "Error") = 1 Then
        GUICtrlSetState($h_8, $GUI_CHECKED)
    EndIf
    If IniRead($sPath_ini, "Section", "Start", "Error") = 1 Then
        StartFunc()
    EndIf

	Myfunc()

EndFunc

;Установка программ
Func Myfunc()
        While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE Or $msg = $hButtonQuit
                Exit
            Case $msg = $hButtonGo
                GUISetState(@SW_DISABLE)
                ; добавить скрипт в автозапуск
                If GUICtrlRead($h_1) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "1", "1")
                EndIf
                If GUICtrlRead($h_2) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "2", "1")
                EndIf
                If GUICtrlRead($h_3) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "3", "1")
                EndIf
                If GUICtrlRead($h_4) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "4", "1")
                EndIf
                If GUICtrlRead($h_5) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "5", "1")
                EndIf
                If GUICtrlRead($h_6) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "6", "1")
                EndIf
                If GUICtrlRead($h_7) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "7", "1")
                EndIf
                If GUICtrlRead($h_8) = $GUI_CHECKED Then
                    IniWrite($sPath_ini, "Section", "8", "1")
                EndIf
                IniWrite($sPath_ini, "Section", "Start", "1")

                StartInstall()

                GUISetState(@SW_ENABLE)
        EndSelect
    WEnd
 EndFunc   ;==>Myfunc

Func StartInstall()
    If GUICtrlRead($h_1) = $GUI_UNCHECKED And GUICtrlRead($h_2) = $GUI_UNCHECKED And GUICtrlRead($h_3) = $GUI_UNCHECKED And GUICtrlRead($h_4) = $GUI_UNCHECKED And GUICtrlRead($h_5) = $GUI_UNCHECKED And GUICtrlRead($h_6) = $GUI_UNCHECKED And GUICtrlRead($h_7) = $GUI_UNCHECKED = $GUI_UNCHECKED And GUICtrlRead($h_8) = $GUI_UNCHECKED Then
        MsgBox(0, 'Error', 'Ни одного пункта не выбрано!')
    Else
        If GUICtrlRead($h_1) = $GUI_CHECKED Then
			IniWrite($sPath_ini, "Section", "Key", "Rebut")
			fragment()
        EndIf
    EndIf
	StartFunc()
EndFunc ; ==> StartInstall

Func StartFunc()
    GUICtrlSetData($hLabel, 'SP3 установлен')
    If GUICtrlRead($h_2) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Обновляем драйверы')
        Run("\Автоинсталл\Soft\DRPSu12\DriverPackSolution.exe")
        ControlClick('DriverPack Solution 12','Отмена','Button2')
        GUICtrlSetData($hLabel, 'Драйверы обновлены')
    EndIf
    If GUICtrlRead($h_3) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x32')
        ; устанавливаем WinRar x32
        Run("\Автоинсталл\Soft\winrar-x32-420ru.exe")
        WinWaitActive("WinRAR 4.20 (русская 32-разрядная версия)")
        ControlClick('WinRAR 4.20 (русская 32-разрядная версия)','Установить','Button2')
        WinWaitActive("Настройка WinRAR")
        Send("{enter}")
        WinWaitActive("Установка WinRAR")
        ControlClick('Установка WinRAR','Готово','Button1')
        Sleep(1000)
        WinWaitActive("WinRAR")
        WinClose("WinRAR")
        sleep(1000)
        GUICtrlSetData($hLabel, 'WinRar x32 установлен')
    EndIf
    If GUICtrlRead($h_4) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем WinRar x64')
        ; устанавливаем WinRar x64
        Run("\Автоинсталл\Soft\winrar-x64-420ru.exe")
        WinWaitActive("WinRAR 4.20 (русская 64-разрядная версия)")
        ControlClick('WinRAR 4.20 (русская 64-разрядная версия)','Установить','Button2')
        WinWaitActive("Настройка WinRAR")
        Send("{enter}")
        WinWaitActive("Установка WinRAR")
        ControlClick('Установка WinRAR','Готово','Button1')
        Sleep(1000)
        WinWaitActive("WinRAR")
        WinClose("WinRAR")
        sleep(1000)
        GUICtrlSetData($hLabel, 'WinRar x64 установлен')
    EndIf
    If GUICtrlRead($h_5) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Reader XI')
        ; устанавливаем Adobe Reader XI
        RunWait("\Автоинсталл\Soft\Adobe Reader XI v11.0.10\Adobe Reader XI v11.0.10\Adobe.Reader.XI.v11.0.10.exe  /S /Q")
        GUICtrlSetData($hLabel, 'Adobe Reader XI установлен')
    EndIf
    If GUICtrlRead($h_6) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Microsoft Office 2007')
        RunWait("\Автоинсталл\Soft\office2007\SETUP.EXE")
        Sleep(1000)
        GUICtrlSetData($hLabel, 'Microsoft Office 2007 установлен')
    EndIf
    If GUICtrlRead($h_7) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Устанавливаем Adobe Photoshop CC 14')
        RunWait("\Автоинсталл\Soft\Adobe Photoshop CC 14.1.2 Final RePack\PhotoshopCC-14.1.2.exe /S /R")
        Sleep(1000)
        GUICtrlSetData($hLabel, 'Adobe Photoshop CC 14 установлен')
    EndIf
    If GUICtrlRead($h_8) = $GUI_CHECKED Then
        GUICtrlSetData($hLabel, 'Reboot')
        Shutdown(2)
        GUICtrlSetData($hLabel, 'Reboot')
     EndIf
        RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", @ScriptName)
        MsgBox(0, 'Done!', 'Все выбранные программы установленны')
        FileDelete($sPath_ini)
        GUICtrlSetData($hLabel, 'Выберите софт и нажмите GO!')
EndFunc ; ==> StartFunc

;Код установки SP3
Func fragment()
    GUICtrlSetData($hLabel, 'Устанавливаем SP3')
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",  @ScriptName, "REG_SZ", @ScriptFullPath)
	Shutdown(2) ; reset
	While 1
		Sleep(100)
	WEnd
EndFunc ; ==> fragment()
Я бы переделал автозагрузку через RunOnce но мне лень со смартфона это делать
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
помимо этого, элементы взять в массив и избавиться от множества If...Then
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
vollez
В RunOnce записывай автозагрузку и в ini веди учёт количества перезагрузок. Хотя и в Run можно, удаляя самостоятельно. А в RunOnce само удаляется после загрузки, и там можно сделать очередь запуска исполняемых файлов.
 
Верх