Что нового

скрипт Удаления антивируса (Правильное написание скрипта)

Talany

Знающий
Сообщения
136
Репутация
11
Здравствуйте!

Написал скрипт который удалит антивирус SmartSecurity
Пожалуйста подскажите ошибки, как правильно и как не правильно!

Код:
#include <GUIConstants.au3>
#include <Timers.au3>
#NoTrayIcon

$aSmart = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{19FDE7C3-9837-4365-883C-01D51A9F262C}"

$result1 = RegRead ($aSmart, "DisplayName")
If @error <> 1 Then
	$msg2 = MsgBox (4, "Внимание", "Внимание на компьютере уже установлен антивирус " & $result1 & ", Прежде чем установить другой антивирус рекомендуется удалить прежний.Сделать это сейчас?")
    If $msg2 = 6 Then
		
		GUICreate("Деинсталяция " & $result1, 350, 120)
GUISetIcon("shell32.dll", 33)
GUICtrlCreateLabel("Удаление антивируса " & $result1, 10, 15, 340, 40)
GUICtrlSetFont (-1, 15, 450)
$n1=GUICtrlCreateIcon (@windowsdir & "\cursors\hourgla3.ani", -1, 140,45,64,64)
GUISetState()
$setUp = GUIGetMsg()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $setUp
			$startTime3 = _Timer_Init()
            RunWait ("msiexec /norestart /quiet /uninstall {19FDE7C3-9837-4365-883C-01D51A9F262C}")
			$stopTime3 = _Timer_Diff($startTime3)
			GUISetState(@SW_HIDE) ; после команды RunWait требуется закрыть окно...
			If $stopTime3 < 3000 Then
			  MsgBox (16, "Ошибка", "Ошибка удаления антивируса " & $result1)
			  Exit
		    EndIf

    EndSelect
WEnd
		
	Else
		Exit
	EndIf
EndIf
; далее долгое продолжение


И еще почему выдает ошибку "MsgBox (16, "Ошибка", "Ошибка удаления антивируса " & $result1)", когда команда отработала более 5сек???

Не надо учить!Просто подскажите как этот скрипт правильно (со всех сторон) написать!

Заранее благодарю!!! :IL_AutoIt_1:
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Что возвращает RunWait? Проверяй
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Насчет правильности -
Код:
$setUp = GUIGetMsg()
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $setUp

Какое событие ты пытаешься отловить? Если GUI создается только для отображения надписи "Удаление антивируса", то так будет правильнее:
Код:
#include <GUIConstants.au3>
#include <Timers.au3>
#NoTrayIcon

$aSmart = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{19FDE7C3-9837-4365-883C-01D51A9F262C}"

$result1 = RegRead ($aSmart, "DisplayName")
If @error <> 1 Then
    $msg2 = MsgBox (4, "Внимание", "Внимание на компьютере уже установлен антивирус " & $result1 & ", Прежде чем установить другой антивирус рекомендуется удалить прежний.Сделать это сейчас?")
    If $msg2 = 6 Then
        GUICreate("Деинсталяция " & $result1, 350, 120)
        GUISetIcon("shell32.dll", 33)
        GUICtrlCreateLabel("Удаление антивируса " & $result1, 10, 15, 340, 40)
        GUICtrlSetFont (-1, 15, 450)
        $n1=GUICtrlCreateIcon (@windowsdir & "\cursors\hourgla3.ani", -1, 140,45,64,64)
        GUISetState()
        $startTime3 = _Timer_Init()
        RunWait("msiexec /norestart /quiet /uninstall {19FDE7C3-9837-4365-883C-01D51A9F262C}")
        $stopTime3 = _Timer_Diff($startTime3)
        GUIDelete() ; после команды RunWait требуется закрыть окно...
        If $stopTime3 < 3000 Then
            MsgBox (16, "Ошибка", "Ошибка удаления антивируса " & $result1)
            Exit
        EndIf
    Else
        Exit
    EndIf
EndIf
; далее долгое продолжение


Насчет ошибки - из справки выдержка по RunWait:
Код:
Как показывает практика, некоторые программы возвращают код завершения немедленно, хотя при этом продолжают выполняться; они, обычно запускают другие процессы. Для последующей работы с процессами в тиках, а также иных случаях, может оказаться полезной функция ProcessWaitClose.

То есть - добавь после RunWait
Код:
ProcessWaitClose('msiexec.exe')
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Благодарю axlwor
Чтото затупил и не проверил!!!
Благодарю Redline за исправление!
Это было то что нужно!
Всем спасибо!
 
Верх