網頁標題: [函式] UninstallDir (徹底刪除資料夾)
 



[函式] UninstallDir (徹底刪除資料夾)
2008-06-30 00:05:09

這是在移除過程最常用到的 AutoIt 函式。

MoveFileEx 是 Windows 的一個 API,可將無法刪除的檔案記錄在登錄檔中的 PendingFileRenameOperations 鍵,等待重新開機後清除。但此 API 只在 Windows NT 支援,所以 Win98 只好土法練鋼,透過編輯 wininit.ini 檔來達到開機時清除。

UninstallDir 就是用遞迴來刪除資料夾中的每個檔案。


Func MoveFileEx($Path)

  If @OSType = "WIN32_NT" Then

    DllCall("kernel32.dll", "int", "MoveFileEx", "str", $Path, "int", 0, "int", 4)

  Else

    $Path = FileGetShortName($Path)

    $NULStr = "NUL="

    If StringInStr(FileGetAttrib($Path), "D") Then $NULStr = "DIRNUL="

    Local $IniFile = @WindowsDir & "\wininit.ini"

    Local $Wininit = FileRead($IniFile) & " "

    If @Error Then

      FileWrite($IniFile, "[rename]" & @CRLF & $NULStr & $Path & @CRLF)

    Else

      Local $Pos, $E

      $Pos = StringInStr($Wininit, "[rename]")

      If $Pos = 0 Then

        FileWrite($IniFile, @CRLF & "[rename]" & @CRLF & $NULStr & $Path & @CRLF)

      Else

        $Pos = StringRegExp($Wininit, "(?i)\[rename\].*?\#(\r\n)+(\[| )", 1)

        $E = @Extended

        FileDelete($IniFile)

        If $E Then

          FileWrite($IniFile, StringTrimRight(StringLeft($Wininit, $Pos[0]) & @CRLF & $NULStr & $Path & StringTrimLeft($Wininit, $Pos[0]), 1))

        Else

          FileWrite($IniFile, StringReplace($Wininit, "[rename]", "[rename]" & @CRLF & $NULStr & $Path & @CRLF, 1))

        EndIf

      EndIf

    EndIf

  EndIf

EndFunc



Func UninstallDir($Dir)

  Local $Find = FileFindFirstFile($Dir & "\*.*")

  If $Find <> -1 Then

    While 1

      Local $File = FileFindNextFile($Find)

      If @Error Then ExitLoop

     

      Local $Path = $Dir & "\" & $File



      FileSetAttrib($Path, "-RSH")

      If StringInStr(FileGetAttrib($Path), "D") Then

        UninstallDir($Path)

      Else

        If FileDelete($Path) = 0 Then MoveFileEx($Path)

      EndIf

    WEnd

  EndIf

  FileClose($Find)  

  If DirRemove($Dir, 1) = 0 Then MoveFileEx($Dir)

EndFunc




http://space.uwants.com/index.php/uid-3338933-action-spacelist-type-blog-itemtypeid-22351
回 · 發現好東西 autoit 這一篇文章封面


本文張貼者:校校鴿〔張貼時間:民國100年10月9日(星期天)13點25分〕 | 寫信給校校鴿

部落格首頁


學習的故鄉首頁
本站公告:〔您越需要我們,我們就越有創意〕 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」
〔為了讓我們有乾淨的學習環境,請勿任意在本站散播商業廣告與不合法文件或聯結〕:本站宣示