簡體   English   中英

為什么ProcessExplorer可以使handles.exe無法發現我的DLL?

[英]Why isn't handles.exe discovering my DLL while ProcessExplorer can?

問題:在Windows Server 2012 R2盒子上,我試圖用Chef以編程方式替換.dll命令組件(又是我已經使用regsvr32.exe在盒子上注冊的vb 6庫),但是當我嘗試復制文件時,網站的應用程序池已鎖定。 我不確定是否重要,但是w3wp進程設置為通過IIS以32位運行。

我的解決方案(不起作用):為了修復它,我在考慮使用命令行工具來查找對dll的引用,然后回收正在使用它的應用程序池。 不幸的是,雖然我可以讓SysInternals的進程瀏覽器找到dll,但是Handles.exe(進程瀏覽器的命令行版本)不會返回任何內容。 我希望有人可以告訴我我是如何錯誤使用手柄,或者是否有更好的工具可以解決這個問題。

進程瀏覽器-它找到了我的dll ComHelper.dll ProcessExplorer_working

通過命令行進行處理-找不到我的dll ComHelper.dll HandlesCommandLine_not_working

-編輯-當以管理員身份運行時將其指向w3wp時,這是句柄的輸出 HandlesSearchingForW3WP

我懷疑您會遇到訪問問題。 您是從提升權限的命令提示符運行Handle嗎? 您是否能夠在w3wp.exe中獲得任何覆蓋句柄的輸出(通過在handle.exe命令行中使用進程的pid)?

看一下w3wp.exe的句柄枚舉輸出,

listdll.exe -d ComHelper.dll 

可能就是您要尋找的。 處理似乎集中於打開的文件而不是dll加載的文件。 listdll是可以從sysinternals下載的工具。

好的,所以32位確實很重要。 我最終不得不訴諸於Powershell,而不是嘗試使用手柄。 用於查找文件上具有鎖定狀態的PID的代碼分散在互聯網上,但這是鏈接: http : //blogs.technet.com/b/heyscriptingguy/archive/2013/12/01/weekend-scripter-確定過程,鎖定一個文件.aspx (這是機器人在底部的答案的毀滅

作為記錄,這是建議的

$lockedFile="C:\Windows\System32\acproxy.dll"
$isLocked = $false
Get-Process | foreach{
    $processVar = $_;$_.Modules | foreach{
    if($_.FileName -eq $lockedFile){
        $isLocked = $true
        $processVar.Name + " PID:" + $processVar.id
        }
    }
}

這就是我用Powershell笨拙的東西將其翻譯成的

$lockedFile = "E:\Components\___ComHelper.dll"
$list = Get-Process
foreach ($process in $list)
{
    foreach ($module in $process.Modules)
    {
        if ($module.FileName -ne $lockedFile) { continue }

        $process.Name + " PID:" + $process.Id
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM