3

問題: Windows Server 2012 r2 ボックスで、Chef を使用して .dll コマンド コンポーネント (別名、regsvr32.exe を使用してボックスに登録した vb 6 ライブラリ) をプログラムで置き換えようとしていますが、ファイルをコピーすると、Web サイトのアプリ プールがロックされます。問題があるかどうかはわかりませんが、w3wp プロセスは IIS 経由で 32 ビットとして実行するように設定されています。

私の解決策(機能していません):それを修正するために、コマンドラインツールを使用してdllへの参照を見つけ、それを使用しているアプリプールをリサイクルすることを考えていました. 残念ながら、SysInternals のプロセス エクスプローラーで dll を見つけることはできますが、Handles.exe (プロセス エクスプローラーのコマンド ライン バージョンと思われる) は何も返しません。誰かが私がどのようにハンドルを間違って使用しているか、またはこれのためのより良いツールがあるかどうかを教えてくれることを望んでいました.

Process Explorer - dll ComHelper.dll が見つかりました ProcessExplorer_working

コマンド ライン経由で処理 - dll ComHelper.dll が見つかりません HandlesCommandLine_not_working

-- 編集 -- これは、管理者として実行中に w3wp をポイントしたときのハンドルの出力です。 HandlesSearchingForW3WP

4

2 に答える 2

0

よし、32 ビットは重要だった。ハンドルを使用しようとするのではなく、powershellに頼らざるを得なくなりました。ファイルをロックしている PID を見つけるためのコードはインターネット上に散らばっていますが、リンクは次のとおりです 。 determine-process-that-locks-a-file.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
        }
    }
}

これは、私がパワーシェルの初心者で翻訳したものです

$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
    }
}
于 2015-05-13T21:56:02.543 に答える