2015-01-22 2 views
1

OLE 개체를 만들 때 프로그램 끝에서이를 해제해야합니다. 그렇지 않으면 프로세스가 백그라운드에서 계속 실행됩니다. Powershell에서 atexit과 같은 유닉스를 얻는 방법?

나는 다음과 같은 예를 썼다 :
$excel = New-Object -ComObject Excel.Application 

# some long running code here 

finally 
{ 
    "running finally" 
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) 
} 

내가 Ctrl 키으로 스크립트 중지

- finally 블록이 실행되지 않고 중간에 "장기 실행 코드"동안 C을. 내가 할 때마다 프로세스 테이블에서 또 다른 EXCEL.EXE 프로세스를 얻습니다.

어떻게 안정적으로 사용자가 Ctrl 키으로 스크립트를 중단하는 경우에도 COM 개체를 해제 할 수 있습니다 - C를?

+0

가 첫 번째 비트는 적어도 '차단 try'에인가? – arco444

+0

@ arco444 그것이 맞거나 다르면 별다른 차이가 없습니다. – ceving

+0

[이 링크] (https://social.technet.microsoft.com/Forums/windowsserver/en-US/fb409048-a607-4895-8ab3-08c2ec656c7a/trapping-ctrlc-in-powershell-v2? forum = winserverpowershell) - 두 번째 대답은 시나리오에 맞을 수있는 것처럼 보입니다. – arco444

답변

0

Engine Events는 (전용 콘솔에서 작동하지 파워 쉘 ISE) 시도 :

# Set up automatic functionality on engine exit. 
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action { 
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) 
} 
관련 문제