|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Сокращение / оптимизация скрипта проверки состояния и запуска служб MU |
|
|
[решено] Сокращение / оптимизация скрипта проверки состояния и запуска служб MU
|
Ветеран Сообщения: 903 |
Профиль | Отправить PM | Цитировать
Суть: есть скрипт определения состояния служб, ответственных за запуск MU. Кроме того, скрипт позволяет сделать оптимизацию служб, если их конфигурация не позволяет работать MU. Предусмотрен также откат на старые настройки (сделал обновление и снова вернул службы в исходное положение)
Проблема: 1. 2. скрипт получился слишком громоздким. Имхо, мне кажется, что его можно значительно сократить (м.б. за счет использование массивов?). Это прежде всего касается следующих блоков скрипта: а) Func _ServicesStat() б) Func _SaveOld() Как мне кажется, эти бесконечные case и If -> Endif - не совсем грамотный путь. |
|
------- Отправлено: 05:13, 26-08-2010 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать проблему удалось решить только так:
1. заменил код: Func _SaveOld() GUICtrlSetState($Button_Save, $GUI_DISABLE) $Save_Event = $sLog3_2 $Save_BITS = $sLog2_2 $Save_MU = $sLog1_2 sleep(1000) GUICtrlSetState($Button_Save, $GUI_ENABLE) EndFunc 2. заменил код: Func _RestoreOld() GUICtrlSetState($Button_Restore, $GUI_DISABLE) RunWait(RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog', 'Start', 'REG_DWORD', $Save_Event)) RunWait(RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\muauserv', 'Start', 'REG_DWORD', $Save_MU)) RunWait(RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BITS', 'Start', 'REG_DWORD', $Save_BITS)) sleep(1000) _ServicesStat() sleep(1000) GUICtrlSetState($Button_Restore, $GUI_ENABLE) EndFunc Func _RestoreOld() GUICtrlSetState($Button_Restore, $GUI_DISABLE) RunWait('sc config eventlog start= ' & $Save_Event &'', '', @SW_HIDE) RunWait('sc config wuauserv start= ' & $Save_MU &'', '', @SW_HIDE) RunWait('sc config BITS start= ' & $Save_BITS &'', '', @SW_HIDE) sleep(1000) _ServicesStat() sleep(1000) GUICtrlSetState($Button_Restore, $GUI_ENABLE) EndFunc Цитата saavaage:
|
|
------- Последний раз редактировалось saavaage, 27-08-2010 в 14:03. Отправлено: 13:47, 27-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата saavaage:
- туманное и нечеткое описание задач скрипта; - скрипт "сходу" нерабочий (ошибки отсутствия .AU3, переменных и т.п.); - отсутствуют комментарии/структурирование кода ...Вы всё еще чему-то удивляетесь? |
|
Отправлено: 10:56, 29-08-2010 | #3 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать amel27 & ALL, извините, исправляюсь:
1. версия autoit 3.3.6.1 2. задачи скрипта: 1. индикация состояния служб, необходимых для работы MU (зеленые иконки - соответсвуют, красные -нет) 2. по нажатию на кнопки совершить следующие действия: - кнопка"Сохранить" - сохранение текущей конфигурации "типа запуска" служб (т.е. конфигурация, которая у юзера поумолчанию) - кнопка "Старт" - изменение (если необходимо) умолчальных конфигураций служб на конфигурации, которые позволяют MU работать (включая не только изменение типа запуска, но и сам старт служб) - кнопка "Откат" - если необходимо, позволяют юзеру откатить "новые" настройки (тип запуска) на те, которые у него раньше были (важно, если работаешь на чужом ПК или сам не хочешь держать автообновление и проч. в автозагрузке). 3. скрипт рабочий, но необходимо качать архив mu_services.7z, т.к. без иконок, Вы не увидите его работу. Код был выложен для общей информации и без иконок он работать не будет. кроме того, каюсь, забыл вложить Icons.au3. 4. комментарии добавил,архив перезалил (см. шапку). Заранее спасибо |
------- Последний раз редактировалось saavaage, 30-08-2010 в 17:55. Отправлено: 17:39, 30-08-2010 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата saavaage:
1. сохранял бы состояние служб не в переменных, а в файле или реестре; 2. избавился от внешней утилиты SC, варианты - реестр, WMI, API; 3. вместо конструкции Select/Case активней использовал массивы (параметризация); 4. только нужные ф-ции из Icons.AU3 перенес в основной код скрипта 5. подключил иконки как ресурс EXE-файла что Вы думаете по этому поводу? |
||
Отправлено: 11:45, 31-08-2010 | #5 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать amel27, мда.... не все понял, но:
1. вопрос в том, что я хочу сделать утилиту, которая бы не следила на машшине, т.е. , по возможности, никаких доп. изменений 2. sc - вынужденная необходимость. ввел, когда не получилось изменить через RegWrite тип запуска Автоматического обновления. Плюс -утилита присутствует как в xp, так и в win7 3. массивы пока только планирую начать изучать (я так понял, что нужно смотреть все функции с _Array) Если не затруднит, то можно дать направление, что делать мне в данном случае или, даже, пример 4. если можно, то почему так будет лучше? Меньше весить будет или еще что-то? Просто, этот скрипт- часть утилиты, которую я пытаюсь сделать (там 6 вкладок и уже много инклюдов) и для меня этот вопрос очень важен.. 5. не совсем понял? это через file instal или как? |
------- Отправлено: 12:15, 31-08-2010 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать 1. дело вкуса, можно и в TEMP... но если скрипт зависнет, все сохранения пропадут
2. насколько помню, Вы его использовали неправильно, но запустить службу через реестр всё равно не выйдет, проще всего через WMI 3. нет, без всяких библиотек, эквивалентен такому: Dim $aSvcState[5]=['boot','','auto','demand','disabled'] $Save_MU = $aSvcState[$sLog1_2] $Save_BITS = $aSvcState[$sLog2_2] $Save_Event= $aSvcState[$sLog3_2] 5. AutoIt Wrapper GUI - Расширенная компиляция скриптов |
Отправлено: 12:52, 31-08-2010 | #7 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать amel27,
по п.2 - там была проблема с переключением "типа запуска" Автообновления, а не сам запуск. Т.е. не отрабатывал такой вариант: $Save_MU = $sLog1_2 RunWait(RegWrite('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\muauserv', 'Start', 'REG_DWORD', $Save_MU)) 1. создается массив из 5 элементов (boot, system, auto, demand, disabled) Dim $aSvcState[5]=['boot','system','auto','demand','disabled'] 2. идет присвоение переменным: $Save_MU - присваивается значение элемента массива $aSvcState[$sLog1_2], причем, насколько я понял [$sLog1_2] -это порядковый номар элемента? Т.е. если $sLog1_2 = 2, то выбирается 2 номер, т.е. auto... и так далее Правильно? |
------- Отправлено: 13:27, 31-08-2010 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:14, 31-08-2010 | #9 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать amel27, на эту же тему - попробЫвал также переделать код с иконками (пришлось делать многомерный массив, т.к. разные условия):
на: Dim $aState1[3][4]=[['error.ico','','','ok.ico'], ['','ok.ico','error.ico','error.ico'], ['','ok.ico','ok.ico','error.ico']] $pic1_1 = $aState1[1][$sLog1_1] $pic3_1 = $aState1[1][$sLog3_1] $pic1_2 = $aState1[2][$sLog1_2] $pic2_2 = $aState1[3][$sLog2_2] $pic3_2 = $aState1[2][$sLog3_2] _ImageGet() |
------- Отправлено: 15:54, 31-08-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка - оптимизация | alik777 | Microsoft Windows 2000/XP | 1 | 24-07-2010 22:58 | |
[решено] Оптимизация JS скрипта | System Failure | Вебмастеру | 2 | 12-10-2009 21:29 | |
Службы - Оптимизация | Malfatto | Microsoft Windows Vista | 2 | 06-09-2008 15:08 | |
Оптимизация файлов | Slim-UB | Автоматическая установка Windows 2000/XP/2003 | 7 | 13-06-2006 15:33 | |
Оптимизация | pashka-88 | Хочу все знать | 2 | 30-10-2005 20:49 |
|