ffdshow Posted February 6, 2012 Share Posted February 6, 2012 I need to create an uninstaller that can delete the entire folder (with all content inside it) where is located. Something like this did not work: OnAutoItExitRegister("_DeleteThisScriptOnExit") Func _DeleteThisScriptOnExit() Local $iDelay = 2 Run(@ComSpec & ' /c ping -n ' & $iDelay & ' localhost > nul & rd /s /q "' & @ScriptDir & '"', '', @SW_HIDE) EndFunc Link to comment Share on other sites More sharing options...
water Posted February 6, 2012 Share Posted February 6, 2012 To delete the running script I would use function My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
ffdshow Posted February 6, 2012 Author Share Posted February 6, 2012 The original _SelfDelete function and the can't delete the script directory with all its content. Link to comment Share on other sites More sharing options...
czardas Posted February 6, 2012 Share Posted February 6, 2012 Why would you want to do this? operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
water Posted February 6, 2012 Share Posted February 6, 2012 (edited) To delete the directory, all subdirectories, all contained files including the running script I would use a 2-step approach: 1) The script is called without parameter. It copies itself to a temporary directory. Then it calls the copy in the temp directory, passing the process-Id and path to delete as parameters and then exits 2) The copy in the temp direcory waits until the passed process no longer exists. Then it deletes the passed directory and as a last step runs _SelfDelete. Edited February 6, 2012 by water My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
ffdshow Posted February 6, 2012 Author Share Posted February 6, 2012 Why would you want to do this?It's just an uninstaller like those created by InnoSetup. Link to comment Share on other sites More sharing options...
czardas Posted February 6, 2012 Share Posted February 6, 2012 (edited) I see. The only way I know to do this would be to run a script outside the Dir, but that doesn't mean to say there are not many other possibilities. I think there are some example scripts that will allow you to do something along these lines, but I haven't tried. Also using the temp dir might be an option.EditI just read water's post above. Edited February 6, 2012 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
Yashied Posted February 6, 2012 Share Posted February 6, 2012 #Include <File.au3> ;~_ScriptDestroy() ; WARNING!!! MAKE SURE IN WHAT FOLDER IS THE SCRIPT BECAUSE FOLDER WILL BE REMOVED!!! Func _ScriptDestroy() Local $Path = FileGetShortName(@ScriptFullPath) Local $Temp = _TempFile(@TempDir, '~', '.bat') FileWrite($Temp, _ '@echo off' & @CRLF & _ ':loop' & @CRLF & _ 'del ' & $Path & @CRLF & _ 'if exist ' & $Path & ' goto loop' & @CRLF & _ 'rd /q /s ' & FileGetShortName(@ScriptDir) & @CRLF & _ 'del ' & $Temp) FileChangeDir(@TempDir) Run($Temp, '', @SW_HIDE) EndFunc ;==>_ScriptDestroy My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
ffdshow Posted February 6, 2012 Author Share Posted February 6, 2012 (edited) I managed to do this using 2 scripts: First (it will copy and run the second compiled script): FileCopy(@ScriptDir & "2.exe", @TempDir, 1) Run(@TempDir & "2.exe") Exit The second: Sleep(1000) DirRemove("C:Setup", 1) OnAutoItExitRegister("_DeleteThisScriptOnExit") Func _DeleteThisScriptOnExit() Local $iDelay = 2 Run(@ComSpec & ' /c ping -n ' & $iDelay & ' localhost > nul & del /f /q "' & @ScriptFullPath & '"', '', @SW_HIDE) EndFunc Edited February 6, 2012 by ffdshow Link to comment Share on other sites More sharing options...
ffdshow Posted February 6, 2012 Author Share Posted February 6, 2012 (edited) Yashied's script doesn't work. Edited February 6, 2012 by ffdshow Link to comment Share on other sites More sharing options...
Yashied Posted February 6, 2012 Share Posted February 6, 2012 You need to uncomment the following line. _ScriptDestroy() My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
ffdshow Posted February 6, 2012 Author Share Posted February 6, 2012 (edited) Thanks. Now works. Another approach: $InstallDir = @ScriptDir $file = FileOpen(@TempDir & "uninstaller.txt", 1) FileWriteLine($file, '@ECHO OFF') FileWriteLine($file, 'RD /S /Q ' & '"' & $InstallDir & '"') FileWriteLine($file, 'DEL /F /Q ' & '"' & @TempDir & "uninstaller.cmd" & '"') FileClose($file) FileMove(@TempDir & "uninstaller.txt", @TempDir & "uninstaller.cmd", 1) FileChangeDir(@TempDir) Run(@TempDir & "uninstaller.cmd", "", @SW_HIDE) Exit Edited February 6, 2012 by ffdshow Link to comment Share on other sites More sharing options...
guinness Posted February 6, 2012 Share Posted February 6, 2012 Might add additional functionality into _SelfDelete to delete the script directory too. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now