簡體   English   中英

Powershell刪除鎖定的文件但保留在內存中

[英]Powershell Delete Locked File But Keep In Memory

直到最近,我們一直在通過簡單地手動將.exe應用程序復制到服務器上的目標文件夾來對其進行部署。 但是,在部署時,該文件通常已經在運行(從SQL Server作業中調用該文件),有時甚至是多個實例。 我們不想在進程運行時終止它。 我們也不能等待它完成,因為它不斷被調用,有時會並發多次。

解決方法是,我們通過Windows資源管理器將.exe文件“剪切並粘貼”到另一個文件夾中。 顯然,此操作是將文件移動(實際上是刪除),但將其保留在RAM中,以便使用該文件的進程可以繼續進行而不會出現問題。 然后我們將新文件放到那里,以后任何程序調用它時都會調用它。

現在,我們已移至自動部署工具,我們需要一種自動的方式來執行此操作。

Stop-Process -name SomeProcess

在PowerShell中將終止該進程,我不想這樣做。

有沒有辦法做到這一點? (C#也可以。)

謝謝,

function moverunningprocess($process,$path)
{
    if($path.substring($path.length-1,1) -eq "\") {$path=$path.substring(0,$path.length-1)}
    $fullpath=$path+"\"+$process
    $movetopath=$path + "--Backups\$(get-date -f MM-dd-yyyy_HH_mm_ss)"
    $moveprocess=$false

    $runningprocess=Get-WmiObject Win32_Process -Filter "name = '$process'" | select CommandLine
    foreach ($tp in $runningprocess)
    {
        if ($tp.commandline -ne $null){
            $p=$tp.commandline.replace('"','').trim()
            if ($p -eq $fullpath) {$moveprocess=$true}
        }
    }

    if ($moveprocess -eq $true)
    {
        New-Item -ItemType Directory -Force -Path $movetopath
        Move-Item -path "$path\*.*" -destination "$movetopath\"
    }
}

moverunningprocess "processname.exe" "D:\Programs\ServiceFolder"

由於您正在利用SQL Server來調用EXE。 為什么要添加一個包含文件最新版本路徑的表,並修改觸發EXE的代碼。 這樣,當推出新版本時,您可以創建一個新文件夾,將文件放在其中,並更新指向它的表。 這樣一來,所有仍處於活動狀態的線程都可以訪問舊版本,而任何新線程都可以提取新的可執行文件。 然后,您可以刪除不再需要的舊文件。

暫無
暫無

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

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