由於這是一個古老的問題,仍然無法找到好的解決方案。無法將oci.dll文件複製到C:/ windows/system32
我正在使用cmd將oci.dll複製到system32文件夾。
訪問被拒絕被顯示。我的所有oracle服務已停止,並且我登錄了一個管理員帳戶。
和預期的一樣,我也無法刪除oci.dll文件。
由於這是一個古老的問題,仍然無法找到好的解決方案。無法將oci.dll文件複製到C:/ windows/system32
我正在使用cmd將oci.dll複製到system32文件夾。
訪問被拒絕被顯示。我的所有oracle服務已停止,並且我登錄了一個管理員帳戶。
和預期的一樣,我也無法刪除oci.dll文件。
最後我能解決這個問題。我將逐步發佈解決方案,因爲它可能在未來有所幫助。
原因的問題:
的問題是,我要複製或刪除文件oci.dll
已經被一個/多個進程獲取。
解決方案:
1)首先,我們必須找出哪個進程(或多個)/實際使用oci.dll
文件。要檢查這只是去到CMD,將目錄更改爲C:\ Documents和Settings,然後運行任務列表/ M OCI.DLL(或你所面臨的麻煩的DLL的名稱因此,簡而言之:
C:\Documents and Settings>tasklist /m oci.dll
運行此命令可以用PID其使用OCI.DLL獲取進程(ES)的列表。在我的情況是 - exploerer.exe
所以,我要殺死Explorer.exe進程拷貝/刪除oci.dll文件。還可以使用Microsoft的一個非常好的軟件Process Exploerer來查找有關.dll文件的進程並終止進程。
現在,我們都準備好了。我們必須以管理員模式打開cmd並將oci.dll文件複製到system32文件夾中,並且oci.dll已成功複製。
附:
結束Explorer.exe中您可能會發現要複製的問題。在正確地終止所有explorer.exe進程後,您可以按Ctrl+Alt+Delete
來打開任務管理器並去File -> New Task(Run...)
創建一個用於複製/刪除資源管理器的新任務。
你通常沒有殺死一個進程,以取代正在使用的DLL。您應該能夠重命名映射的EXE/DLL,然後將新文件移動或複製到舊名稱。作爲管理員,您甚至可以讓系統在下次啓動時刪除重命名的舊EXE/DLL。 – eryksun
如何重命名某個進程已經獲取的dll文件? –
在加載的EXE/DLL中沒有任何固有的東西阻止獲取對其進行重命名。該文件以「FILE_SHARE_DELETE」訪問打開,允許重命名(重新鏈接)該文件。實際上,刪除文件失敗,訪問被拒絕(5)而不是共享衝突(32),因爲內存管理器是不允許的,就像它不允許刪除分頁文件或映射數據文件一樣。還要注意,System32中很多文件的文件安全性只授予管理員RX訪問權限,因此您必須通過takeown.exe獲取所有權並修改安全性以授予通過icacls.exe的完全控制權。 – eryksun