Jump to content

Automation of uninstaller for unattended deployement component


Recommended Posts

Hi. my first topic :)

first off i read the forum rules, i hope this help request doesent conflict with the rule about not automationg applications that dont allow automation. i searched a little around and i could not find anything in the eula/tos from the symantec stating that its illegal to automate it

i am trying to make an automated removal logic for some applications. in the situation i need it there are few options as i handle every concievable windows nt software configuration from oem manufacturers.(no im not developing viruses) i work in a company running mass pre-auditing(setup) of computers for customers, at this point my only acceptable sollution is using using the base factory config from the computers manufacturer as my base.

the one i am having a lot of problems with is the norton internet security and norton 360 range(i need to remove it silently/unattended in order before running our volumekey fsecure install). norton products(for obvious reasons) only support a quiet install switch not a quiet uninstall swith. to make it worse i have tried everything i can think of a way to try to automate the window but the best iwe come up with is that have to get my script to "guess" where in the process the uninstallation is, and run a long do..until loop until the application is uninstalled. this is slow and can fail in some instances. even tho its successrate is up to about 90% on computers with the version of norton iwe made spesific send() commands for. i want to explore all possibilities to try and make the script atlest "know" when it has succesfully activated the hyperlinks(buttons) in the installer:

au3infotool reports the windows in this example as:

>>>> Window <<<<

Title: Norton 360 5.0

Class: install_ui_frame

Position: 196, 41

Size: 794, 530

Style: 0x960A0844

ExStyle: 0x00010000

Handle: 0x00050254

>>>> Control <<<<

Class:

Instance:

ClassnameNN:

Name:

Advanced (Class):

ID:

Text:

Position:

Size:

ControlClick Coords:

Style:

ExStyle:

(this is all that all the norton products windows displays during the whole installer process)

but it actually has 3 "instances"(sorry im not english)

here is the part of my code that i want you guys to have a look at(yes i am a novice at autoit scripting i know very well that the logic of this script can be improved on(a lot). but before i start spending time to re-write the adhoc loops i made during debugging i wanna know if i can do this another way):

#RequireAdmin
Func _NortonRemoveSilent()
WinKill("Norton")
Opt("WinTitleMatchMode", 2)
Global $timer, $check = True
$nrt = False
Global $timer = TimerInit()
If $check Then
  Run($uninstallString) ; this $var is from another function that finds the uninstall string in the registry
  Sleep(5000)
  Local $c1
  Do
   Select
    Case WinExists("Norton Internet Security")
     Do
      $nrt = False
      WinActivate("Norton Internet Security")
      Sleep(20000)
      WinActivate("Norton Internet Security")
      Sleep(200)
      Send("{TAB}")
      Sleep(100)
      Send("{TAB}")
      Sleep(400)
      Send("{ENTER}")
      Sleep(2000)
      Send("{ENTER}")
      Global $timer2 = TimerInit()
      Do
       If WinActive("Norton", "Er du sikker") Then
        ControlClick("Norton", "", "[ID:7]")
        Sleep(30000)
        WinKill("Norton Internet Security")
       Else
        Sleep(5500)
        WinClose("Norton")
       EndIf
       Sleep(500)
       ConsoleWrite(TimerDiff($timer2) & @CRLF)
      Until Not WinExists("Norton Internet Security") Or TimerDiff($timer2) > 240000
      ConsoleWrite(TimerDiff($timer) & @CRLF)
     Until Not ProcessExists("InstStub.exe") Or Not WinExists("Norton") Or TimerDiff($timer) > 333000
    Case WinExists("Norton 360 5.0")
     Do
      WinActivate("Norton 360 5.0")
      $nrt = False
      Sleep(2000)
      Send("{TAB}")
      Sleep(100)
      Send("{TAB}")
      Sleep(400)
      Send("{ENTER}")
      Sleep(2000)
      Send("{TAB}")
      Sleep(400)
      Send("{TAB}")
      Sleep(400)
      Send("{ENTER}")
      Global $timer2 = TimerInit()
      Do
       WinActivate("Norton")
       Sleep(4000)
       WinClose("Norton")
       Sleep(2000)
       ConsoleWrite(TimerDiff($timer2) & @CRLF)
      Until Not ProcessExists("InstStub.exe") Or TimerDiff($timer2) > 100000
      ConsoleWrite(TimerDiff($timer) & @CRLF)
     Until Not ProcessExists("InstStub.exe") Or Not WinExists("Norton") Or TimerDiff($timer) > 202400 Or $nrt = True
    Case WinExists("Norton 360 6.0")
     Do
      $nrt = False
      WinActivate("Norton 360 6.0")
      Send("{TAB}")
      Sleep(200)
      Send("{TAB}")
      Sleep(200)
      Send("{ENTER}")
      Sleep(2000)
      Send("{TAB}")
      Sleep(200)
      Send("{TAB}")
      Sleep(400)
      Send("{ENTER}")
      Global $timer2 = TimerInit()
      Do
       WinActivate("Norton")
       Sleep(4000)
       WinClose("Norton")
       Sleep(2000)
       ConsoleWrite(TimerDiff($timer2) & @CRLF)
      Until Not ProcessExists("InstStub.exe") Or TimerDiff($timer2) > 100000
      ConsoleWrite(TimerDiff($timer) & @CRLF)
     Until Not ProcessExists("InstStub.exe") Or Not WinExists("Norton") Or TimerDiff($timer) > 202400 Or $nrt = True
   EndSelect
   Sleep(500)
   ConsoleWrite(TimerDiff($timer) & @CRLF)
   $c1 += 1
   ConsoleWrite("Run nr " & $c1 & @CRLF)
  Until TimerDiff($timer) > 404800 Or $nrt = True Or Not ProcessExists("InstStub.exe") Or $check = Not True Or $c0 = 3
  $check = Not $check
  ConsoleWrite(TimerDiff($timer) & @CRLF)
#cs
If $nrt = True Then ; nrt er deaktivert pga ingen mulighet til a sjekke write status pa installeren
   MsgBox(4096, "Feil!", "feil under uninstall, kjører Norton removal tool, script settes på pause til du er ferdig. ikke kjør reboot! men trykk ALT+F6 når ferdig")
   WinKill("Norton")
   ShellExecuteWait(@ScriptDir & "/nrt.exe")
   WinWaitActive("Norton Removal Tool")
   WinWaitClose("Norton Removal Tool")
   ControlSend('Program Manager', '', '', '{F5}')
   $check = Not $check
   Sleep(2000)
  EndIf
#ce
  ControlSend('Program Manager', '', '', '{F5}')
  Sleep(2000)
EndIf
WinKill("Norton")
ProcessClose("InstStub.exe")
EndFunc   ;==>_NortonRemoveSilent

thanks to anyone who is willing to read all this ;)

Link to comment
Share on other sites

Did you try /x and /quiet switches for uninstall quietly the package ?

First thing i tried

Tried(NOT ACTUAL CODE)"%nortonuninstallerlocation%" /X /quiet and silent and /passive and so on.....

Its just not possible to do it this way

Have you searched for the removal tools? They seem very straightforward when i try them, not sure if theres a silent switch or not.

My old version of this script (batch based) use nrt.exe(norton removal tool) for removal. so im familliear with it. The problem with nrt.exe is that iven tho it uses standard windows buttons.(so its possible to automate a high degree of it) it uses capta(i will not have my script touch this) this makes it impossible to use for 100% unattended removal. I intend to use nrt as my fallback methood if error and wait for the technician at work to enter the capta before continuing the script.

Unrelated to this responce:

My thoughts about what can might done but that i dont know how to do.

*the uninstaller ui frame has a set pixel size for any computer its run on. Therefore it might be possible to ocr it

But i have no clue how to. And my thoughts is that is very slow and maybe not very stable.

*maybe use injection on the instui.dll file that the norton uninstaller uses.iwe tried this but no luck there. I couldnt get it working(i have very limited experience working with dlls so if this is a valid method im open to suggestions)

* i ran ui automation verify(similear to au3info) this identifies the window and is able to get info from the ui window. But i wanna d o the script in autoit and i have no idea how to integrate some sollution based on this(once again im open to suggestions)

Thanks for the responces guys. Input is always greatly appriciated :-)

Link to comment
Share on other sites

I have Norton Ghost 14 installed and looking in his installation directory

i found an xml file with silent uninstall informations :

<!-- Uninstall -->

<string>msiExec.exe /X {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /qn REBOOT=R</string>

<string>setup.exe /S /v"/qn ADDLOCAL=Agent,Shared,NGSecurityShortCut /l*v %TEMP%NGinstall.log"</string>

Perhaps there is also one for your Norton 360 version...

And for live update uninstall :

@ProgramFilesDir & 'SymantecLiveUpdateLSETUP.exe /U -s -a -q'

;)

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Link to comment
Share on other sites

I have Norton Ghost 14 installed and looking in his installation directory

i found an xml file with silent uninstall informations :

<!-- Uninstall -->

<string>msiExec.exe /X {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /qn REBOOT=R</string>

<string>setup.exe /S /v"/qn ADDLOCAL=Agent,Shared,NGSecurityShortCut /l*v %TEMP%NGinstall.log"</string>

Perhaps there is also one for your Norton 360 version...

And for live update uninstall :

@ProgramFilesDir &amp; 'SymantecLiveUpdateLSETUP.exe /U -s -a -q'

;)

That last line looks promising. Ill have a look for it when im home. I still think symantec has done all they can to prevent this from being done strictly from cmdline.

Ill update with what i find

Thanks

Link to comment
Share on other sites

I have Norton Ghost 14 installed and looking in his installation directory

i found an xml file with silent uninstall informations :

<!-- Uninstall -->

<string>msiExec.exe /X {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /qn REBOOT=R</string>

<string>setup.exe /S /v"/qn ADDLOCAL=Agent,Shared,NGSecurityShortCut /l*v %TEMP%NGinstall.log"</string>

Perhaps there is also one for your Norton 360 version...

And for live update uninstall :

@ProgramFilesDir &amp; 'SymantecLiveUpdateLSETUP.exe /U -s -a -q'

;)

That last line looks promising. Ill have a look for it when im home. I still think symantec has done all they can to prevent this from being done strictly from cmdline.

Ill update with what i find

Thanks

Edit::

Duplicate post. Sorry i got a timeout. Maybe a moderator can delete this for me?

Edited by landetls
Link to comment
Share on other sites

  • Moderators

Hi, landetls. Look in the registry under HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall and find the key for the product you're trying to uninstall. What does it show for the UninstallString value? That should give you a place to start with the silent uninstall.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

Hi, landetls. Look in the registry under HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall and find the key for the product you're trying to uninstall. What does it show for the UninstallString value? That should give you a place to start with the silent uninstall.

You didn't read his first post, he already get them.

It's silent uninstall switches he doesn't find...

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Link to comment
Share on other sites

  • Moderators

You didn't read his first post, he already get them.

It's silent uninstall switches he doesn't find...

You're right, I missed that in his posted code ;)

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

Have you looked at this thread?

http://it.toolbox.com/blogs/locutus/how-...remotely-remove-symantec-antiv

I know it doesnt really apply because its a different product, but some of the flags (namely this one -> MsiExec.exe /norestart /q/x {E9FA3047-0b15-4e19-85ce-ee7fc6e60f99} REMOVE=ALL) could help, ofc you would need to msi install code.

On another note, you could expand/extract the removal tool to see what it does...or reverse engineer, or take a look at process explorer to see the full flags of the processes running.

Im sure after the captcha code, theres a command run that uninstalls it silently.

Edited by IceBlackIce
Link to comment
Share on other sites

  • 6 months later...

Here is the sollution i came up with to solve the norton uninstall issue, this was written long ago but i just wanted to share it so someone can use it if they need it.

this is the whole uninstaller code with all the trimmings. some of the code, (_ReturnUninstallStringNoUI) is a highly rewritten version of a code i found somewhere on the forums, i dont recall who wrote the original one, my version searches the whole registry for uninstall keys and if they are ".msi" it creates silent uninstall strings for the software, other exe files iwe added filters for, if no silent key can be found/created it will not run it.

the norton spesific part is based on user fastfrench's fastfind.au3 and will even work off screen if the comment is removed from the norton function, it is limited to only the versions it has the controlclick locations for.

i am currently working to rewriting it to make it better so any help optimizing would be greatly appriciated!

( especially with the mouseclick functions, the click verification method im using is'nt very likable and should be possible to do in a better way)

havent been tested on other than the norwegian versions of norton

#include <fastfind.au3>

Global $customapps = "norton avg avast mcafee norman kaspersky"
Global $vAppArray[2] = ["VLC media player", "norton"]

$listing = _ReturnUninstallStringNoUI($vAppArray)
_FilterRun_Uninstallers($listing, $customapps)

#region - Uninstaller
#region - Main
Func _ReturnUninstallStringNoUI(ByRef $vAppArray)
Local $listing[1][3]
If IsArray($vAppArray) Then

If @OSArch = "X64" Then ;Adjust for 64bit os ; mangler komplett sjekk av hkcu, ellers ok ;hkcu skal vere ok med version 0.0.2.95++
$RegPath = "\Microsoft\Windows\CurrentVersion\Uninstall"
$RegRoot86 = "HKLM\SOFTWARE\Wow6432Node"
$RegRoot64 = "HKLM64\SOFTWARE"
$RegRootCU64 = "HKCU\SOFTWARE\Wow6432Node"
$RegRootCU86 = "HKCU\SOFTWARE"
Else;Adjust for 32bit os
$RegPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$RegRoot86 = "HKLM"
$RegRoot64 = "HKLM64"
$RegRootCU64 = "HKCU"
$RegRootCU86 = "HKCU64"
EndIf

$RegRoot = $RegRoot86
$iInstalledAppsCount = 1
$iFound = 0
While 1
$sSubKey = RegEnumKey($RegRoot & $RegPath, $iInstalledAppsCount)
If @error <> 0 Then
If ($RegRoot == $RegRoot86) Or ($RegRoot == $RegRoot64) Or ($RegRoot == $RegRootCU64) Then ; denne oppforer seg ikke riktig, kjor debug
If ($RegRoot == $RegRoot86) Then
$RegRoot = $RegRoot64
$iInstalledAppsCount = 1
Else
If ($RegRoot == $RegRoot64) Then
$RegRoot = $RegRootCU64
$iInstalledAppsCount = 1
ElseIf ($RegRoot == $RegRootCU64) Then
$RegRoot = $RegRootCU86
$iInstalledAppsCount = 1
EndIf
EndIf
Else
ExitLoop
EndIf
EndIf

$sdn = RegRead($RegRoot & $RegPath & "\" & $sSubKey, "DisplayName")
If Not @error <> 0 Then
For $i = 0 To UBound($vAppArray) - 1
If StringInStr($sdn, $vAppArray[$i]) Then
$iFound += 1
$size = ($iFound - 1)
If $iFound > 1 Then
ReDim $listing[UBound($listing, 1) + 1][3]
EndIf
$listing[$size][0] = ($sdn)
$listing[$size][1] = (RegRead($RegRoot & $RegPath & "\" & $sSubKey, "UninstallString"))
$listing[$size][2] = (RegRead($RegRoot & $RegPath & "\" & $sSubKey, "QuietUninstallString"))
If StringInStr($listing[$size][1], "msiexec") Then
If Not StringInStr($listing[$size][1], "/qb") And Not StringInStr($listing[$size][1], "/qn") Then
$listing[$size][1] &= " /qn REBOOT=ReallySuppress"
ElseIf StringInStr($listing[$size][1], "/qb") Then
$listing[$size][1] = StringReplace($listing[$size][1], "/qb", "/qn REBOOT=ReallySuppress")
EndIf
StringReplace($listing[$size][1], "/I{", "/X{")
EndIf
EndIf
Next

EndIf
;ConsoleWrite($iInstalledAppsCount & @CRLF & $sSubKey & @CRLF)
$iInstalledAppsCount += 1
WEnd
Return $listing
Else
Return SetError(1)
EndIf
EndFunc ;==>_ReturnUninstallStringNoUI
Func _FilterRun_Uninstallers($listing, ByRef $customapps)
Local $i
If IsArray($listing) Then
For $i = 0 To UBound($listing) - 1
If StringInStr($listing[$i][1], $customapps) And Not StringInStr($listing[$i][1], "msiexec") Then
Select
Case StringInStr($listing[$i][1], "norton")
_NortonUninstaller($listing[$i][1])
Case StringInStr($listing[$i][1], "avast")
_avastuninstaller($cachedir)
Case StringInStr($listing[$i][1], "avg")
_avguninstaller($cachedir)
Case StringInStr($listing[$i][1], "mcafee")
_mcafeeuninstaller($cachedir)
Case StringInStr($listing[$i][1], "norman")
_normanuninstaller($cachedir)
Case StringInStr($listing[$i][1], "kaspersky")
_kasperskyuninstaller($cachedir)
EndSelect
Else
If StringInStr($listing[$i][1], "msiexec") Or $listing[$i][2] = True Then
$uproc = Run($listing[$i][1], "", @SW_HIDE)
While 1
Sleep(100)
If Not ProcessExists($uproc) Then
Return 1
ExitLoop
EndIf
WEnd
EndIf
If StringInStr($listing[$i][1], "VideoLAN") Or StringInStr($listing[$i][1], "McAfee Security Scan") Then
$listing[$i][1] &= " /S"
$uproc = Run($listing[$i][1], "", @SW_HIDE)
While 1
Sleep(100)
If Not ProcessExists($uproc) Then
Return 1
ExitLoop
EndIf
WEnd
EndIf
EndIf
ControlSend("Program Manager", "", "", "{F5}")
Next
Else
Return 0
EndIf
EndFunc ;==>_FilterRun_Uninstallers
#endregion - Main
#region - CustomUninstallers
Func _NortonUninstaller($sUninstallString)
$proc = WinGetProcess("norton")
If IsDeclared("proc") Then
ProcessClose($proc)
EndIf
$Urun = Run($sUninstallString)

WinWait("Norton")
$title = WinGetTitle("Norton")
$hwnd = WinGetHandle($title)
;WinMove($hwnd, "", 2000, 200) for ferdig script
Select
Case StringInStr($title, "4.0")
_FFMouseClickEX($hwnd, 400, 320);fjern helt
_FFMouseClickEX($hwnd, 400, 370);neste
_FFWinClose($hwnd)
Case StringInStr($title, "2012") Or StringInStr($title, "2011") Or StringInStr($title, "5.0")
_FFMouseClickEX($hwnd, 400, 330);fjern helt
_FFMouseClickEX($hwnd, 400, 360);neste
_FFWinClose($hwnd)
Case StringInStr($title, "6.0")
_FFMouseClickEX($hwnd, 130, 185);fjern helt
_FFMouseClickEX($hwnd, 660, 220);neste
_FFWinClose($hwnd)
Case StringInStr($title, "AntiVirus 2010")
_FFMouseClickEX($hwnd, 400, 235);fjern helt
_FFMouseClickEX($hwnd, 400, 370);neste
_FFWinClose($hwnd)
Case StringInStr($title, "Internet Security 2010")
_FFMouseClickEX($hwnd, 400, 250);fjern helt
_FFWinClose($hwnd)
Case StringInStr($title, "2009")
_FFMouseClickEX($hwnd, 200, 270);fjern helt
_FFMouseClickEX($hwnd, 150, 400);neste
_FFMouseClickEX($hwnd, 90, 533);avslutt, ikke restart
Case Else
_nrt($cachedir, $sUninstallString)
EndSelect

If WinExists($title) Then ;legacy metode(fallback 1)
_FFControlCend($hwnd, "{TAB}")
_FFControlCend($hwnd, "{ENTER}")
_FFControlCend($hwnd, "{TAB}")
_FFControlCend($hwnd, "{ENTER}")
EndIf
Sleep(1000)
If WinExists($title) Then ;nrt(fallback 2)
ProcessClose($Urun)
_nrt($cachedir, $sUninstallString)
EndIf
EndFunc ;==>_NortonUninstaller

Func _Nrt($cachedir, $sUninstallString)
WinKill("Norton")
If FileExists($cachedir & "Norton_Removal_Tool.exe") Then
$nrt = "Norton Removal Tool"
MsgBox(4096, "Feil!", "feil under uninstall/mangler konfig for nortonversion, kjører Norton removal tool, script settes på pause til du er ferdig å skrive inn CAPTA")
Run($cachedir & "Norton_Removal_Tool.exe")
WinWaitActive($nrt)
ControlClick($nrt, "&Next", "[CLASS:Button; INSTANCE:2]")
WinWaitActive($nrt, "You must accept the License Agreement in order to use Norton Removal Tool.")
ControlClick($nrt, "I accept the License Agreement", "[CLASS:Button; INSTANCE:1]")
ControlClick($nrt, "&Next", "[CLASS:Button; INSTANCE:4]")
WinWaitActive($nrt, "Please read the text above, and then type it in the area below.", "[ID:1017]")
Do
If WinExists("Please try again.", "Incorrect match. Please try again.") Then
ControlClick("Please try again.", "OK", "[CLASS:Button; INSTANCE:1]")
Sleep(1000)
EndIf
Until WinExists($nrt, "About to Begin Removal")
ControlClick($nrt, "&Next", "[CLASS:Button; INSTANCE:4]")
WinWaitActive($nrt, "Removing products...")
WinWaitActive($nrt, "Removal Completed")
WinKill($nrt)
Sleep(2000)
Else
MsgBox(4096, "Feil!", "feil under uninstall/mangler konfig for nortonversion, Norton removal tool fil mangler, kjorer manuell avinstallasjon, du ma trykke selv. scriptet venter til du er ferdig")
RunWait($sUninstallString)
EndIf
EndFunc ;==>_Nrt

Func _avastuninstaller($cachedir)
If FileExists($cachedir & 'avastclear.exe') Then
WinKill("avast")
RunWait(@ComSpec & " /c net stop ""avast! Antivirus"" /yes", "", @SW_HIDE)
RunWait(@ComSpec & " /c net stop ""avast! iAVS4 Control Service"" /yes", "", @SW_HIDE)
RunWait(@ComSpec & " /c net stop ""avast! Mail Scanner"" /yes", "", @SW_HIDE)
RunWait(@ComSpec & " /c net stop ""avast! Web Scanner"" /yes", "", @SW_HIDE)
RunWait($cachedir & 'avastclear.exe /verysilent /noreboot /prod "av_pro" "av_32"', "", "", @SW_HIDE); endre til autoremoval via regkey
EndIf
EndFunc ;==>_avastuninstaller

Func _avguninstaller($cachedir)
If FileExists($cachedir & "avg_remover_stf_x86_2012_2125.exe") And FileExists("avg_remover_stf_x64_2012_2125.exe") Then
WinKill("avg")
If @OSArch = "X86" Then
RunWait($cachedir & "avg_remover_stf_x86_2012_2125.exe /silent", "", "", @SW_HIDE)
ElseIf @OSArch = "X64" Then
RunWait($cachedir & "avg_remover_stf_x64_2012_2125.exe /silent", "", "", @SW_HIDE)
EndIf
EndIf
EndFunc ;==>_avguninstaller

Func _mcafeeuninstaller($cachedir)
If FileExists($cachedir & "MCPR.exe") Then
WinKill("mcafee")
Opt('WinTitleMatchMode', 3)
Run($cachedir & "MCPR.exe", "", "", @SW_HIDE)
WinWait("McAfee Cleanup", "Cleanup Progress", 100)
WinWait("[CLASS:#32770]", "Reboot required to remove all files", 100)
If WinExists("[CLASS:#32770]", "Reboot required to remove all files") Then
ProcessClose("McClnUI.exe")
ProcessClose("MCCLEA~1.exe")
EndIf
EndIf
EndFunc ;==>_mcafeeuninstaller

Func _normanuninstaller($cachedir)
If FileExists($cachedir & "Delnvc5.exe") Then
WinKill("norman")
RunWait($cachedir & "Delnvc5.exe /quiet", "", "", @SW_HIDE)
EndIf
EndFunc ;==>_normanuninstaller

Func _kasperskyuninstaller($cachedir)
If FileExists($cachedir & "kavremover.exe") Then
WinKill("kaspersky")
Run($cachedir & "kavremover.exe", "")
WinWaitClose("Kaspersky Lab Products Remover")
EndIf
EndFunc ;==>_kasperskyuninstaller
#endregion - CustomUninstallers
#region - FFfunksjoner
Func _FFMouseClickEX($hwnd, $x, $y)
AutoItSetOption("MouseCoordMode", 2)
If _FFTraceChange($hwnd) = False Then
FFSnapShot("", "", "", "", 10, $hwnd)
ControlClick($hwnd, "", "", "main", 1, $x, $y)
If _FFTraceChange($hwnd, 10) = True Then Return 1
EndIf
EndFunc ;==>_FFMouseClickEX

Func _FFControlCend($hwnd, $key)
If _FFTraceChange($hwnd) = False Then
FFSnapShot("", "", "", "", 10, $hwnd)
ControlSend($hwnd, "", $hwnd, $key)
If _FFTraceChange($hwnd, 10) = True Then Return 1
EndIf
EndFunc ;==>_FFControlCend

Func _FFWinClose($hwnd) ; brukes i jotta config
If _FFTraceChange($hwnd) = False Then
FFSnapShot("", "", "", "", 10, $hwnd)
WinClose($hwnd)
If _FFTraceChange($hwnd, 10) = True Then Return 1
EndIf
EndFunc ;==>_FFWinClose

Func _FFTraceChange($hwnd, $precheck = False)
FFSetDebugMode(0x01)
While 1
FFSetWnd($hwnd)
For $i = 1 To 4
FFSnapShot("", "", "", "", $i, $hwnd)
;FFSaveBMP ( @ScriptDir & "/test"& $i , "" , "" , "" , "" , "" , $i)
Sleep(50)
Next
If $precheck = True Then
If FFIsDifferent($precheck, 1) Or FFIsDifferent($precheck, 2) Or FFIsDifferent($precheck, 3) Or FFIsDifferent($precheck, 4) Then
Return 1
Else
Return 0
EndIf
Else
If FFIsDifferent(1, 2) Or FFIsDifferent(1, 3) Or FFIsDifferent(1, 4) Then
Return 1
Else
Return 0
EndIf
EndIf
WEnd
EndFunc ;==>_FFTraceChange
#endregion - FFfunksjoner
#endregion - Uninstaller
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...