문제

Microsoft Office 프로세스(예:Word, Excel)이 Office 자동화를 사용할 때 중단됩니까?또한 프로세스가 정지된 경우 이를 종료할 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

먼저 서버의 서비스에서 이 작업을 수행하는 것은 권장하지 않지만 질문에 답하기 위해 최선을 다하겠습니다.

서비스로 실행하면 정리가 어렵습니다.예를 들어 서비스로 실행 중인 작업을 사용하면 중단된 단어를 죽여도 살아남거나 엑셀을 수행할 수 있습니다.서비스를 종료해야 할 수도 있습니다.워드나 엑셀이 이 상태이면 서비스가 중단되나요?

정지 여부를 테스트할 때의 한 가지 문제는 테스트로 인해 Word의 새 인스턴스가 시작되고 작동할 수 있지만 서비스가 실행 중인 인스턴스는 여전히 정지될 수 있다는 것입니다.

정지되었는지 확인하는 가장 좋은 방법은 수행해야 할 작업을 수행하도록 요청하고 결과를 확인하는 것입니다.실제로 무엇을하고 있는지 더 자세히 알아야합니다.

정리를 위해 배치 파일에서 사용할 몇 가지 명령은 다음과 같습니다(둘 다 경로에 있어야 함).

  • sc stop servicename - servicename이라는 서비스를 중지합니다.
  • sc start servicename - servicename이라는 서비스를 시작합니다.
  • sc query servicename - servicename의 상태를 쿼리합니다.

  • taskkill /F /IM excel.exe - excel.exe의 모든 인스턴스를 종료합니다.

다른 팁

몇 년 전에 이 일을 했던 기억이 납니다. 따라서 2007이 아니라 Office XP나 2003을 말하는 것입니다.

요즘 자동화를 위한 더 나은 솔루션은 System.IO.Packaging 네임스페이스를 사용하여 docx 등을 설명하는 새로운 XML 형식을 사용하는 것입니다.

그 당시 나는 MSWord가 한계를 뛰어넘고 충분할 때마다 "Dr.Watson'이 머신에서 실행 중이었습니다.이것이 Word가 걸려 넘어졌다는 나의 첫 번째 단서였습니다.때로는 한 개 이상을 볼 수도 있습니다. WINWORD.EXE, 하지만 내 코드는 좋은 의사를 검색하는 데 사용되었습니다.(코드에서) 그것을 본 후에 나는 모두를 죽였습니다. WINWORD.EXE 좋은 의사를 직접 처리하고 Word를 고문하는 과정을 다시 시작했습니다 :-)

무엇을 찾아야 할지에 대한 단서를 제공할 수 있기를 바랍니다.

모두 제일 좋다,

롭 G

추신당신이 제대로 오지 않으면 내 기록 보관소에서 코드를 파낼 수도 있어요!

나는 후반부에 대답할 수 있다.코드에 애플리케이션 개체에 대한 참조가 있는 경우 간단히 "Quit"를 호출하면 됩니다.

private Microsoft.Office.Interop.Excel.Application _excel;
// ... do some stuff ...
_excel.Quit();

중단된 프로세스를 확인하려면 애플리케이션에서 일부 데이터를 가져와 합리적인 시간 내에 결과를 얻을 수 있는지 확인해야 할 것입니다(타이머나 기타 스레드 등을 확인).하지만 아마도 더 좋은 방법이 있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top