2010-02-26 5 views

답변

4

이 시도 :

foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL")) 
     { 
      if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE")) 
      { 
       process.Kill(); 
       break; 
      } 
     } 
+5

이 상당히 unhygenic하고 엑셀 인스턴스가 여전히 열려있는 파일이있는 경우 문제를 일으킬 수 있습니다 소유하고 있습니다. 또한 프로그램에서 시작하지 않은 프로그램 (예 : 사용자가 열어 본 프로그램)을 비롯하여 컴퓨터에서 Excel의 모든 인스턴스를 종료합니다. 작업을 실행하는 사용자의 권한에 따라 다른 사용자에게 속한 Excel 프로세스도 종료 될 수 있습니다 (터미널 서비스 또는 Citrix 서버에서 실행하는 경우). – ConcernedOfTunbridgeWells

+1

@ConcernedOfTunbridgeWells - 네, 아무런 질문없이 엑셀 파일을 열어도 닫힙니다. 그냥 Lalit Dhake의 질문에 대답 해주세요. –

4

나는 당신의 문제가 종료에서 엑셀 과정을 방지 COM 참조 매달려에 의한 것이 약 99 % 확신합니다. 엑셀은 특히 처리하기 쉽고 명시 적으로 종료 할 수있는 방법을 제공하지 않고 COM 참조를 투명하게 생성하는 경향이 있으므로 특히이 문제가 발생하기 쉽습니다.

PIA는 명시 적으로 수행하지 않으면 정리하지 않는 기본 COM 개체에 대한 고유 한 참조 집합을 만들어이 문제를 복합화합니다. PIA를 통해 Excel로 작업하는 것은 바로 이러한 이유 때문에 상당히 까다로운 작업입니다.

Application.Quit()는 참조가 모두 제대로 정리하는 경우 프로세스를 종료합니다 (IIRC이 그것이라고 것입니다). 즉, Excel 프로세스에 대한 COM 참조를 보유하고있는 모든 항목의 수명주기를 신중하게 관리하고 모든 COM 참조가 제대로 정리되었는지 확인해야합니다.

0

사용자의 필요에 따라 COM Interop이없는 Excel 호환 구성 요소를 제공하는 을 사용할 수 있습니다 (인스턴스가 없거나 성능이 뛰어나며 Excel의 설치 여부 또는 설치된 Excel 버전에 대해 걱정할 필요가 없음).).

당신이하는 SpreadsheetGear의 윈도우 컨트롤 및 샘플 here 양식에 대한 자세한 내용은, C# 및 VB 소스 here 라이브 ASP.NET 샘플을보고, 당신이 그것을 자신을 시도하려는 경우 무료 평가판 here을 다운로드 할 수 있습니다.

면책 조항 : 나는하는 SpreadsheetGear LLC는

+0

플러그에 대한 약한 구실. – jwg

1
Application app = new Application(); 
... 
EndTask((IntPtr)app.Hwnd, true, true); 

[DllImport("user32.dll")] 
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force); 
관련 문제