2008-10-27 4 views
3

Vista에서 작동하도록 MS Office 2007 .NET C# Interop 라이브러리를 얻는 방법을 아는 사람이 있습니까?Vista, Office Interop 작동하지 않음

Windows 서비스로 실행되도록 설정 한 .NET C# 응용 프로그램이 있습니다. 이 프로그램은 상황에 따라 Word 또는 Excel 템플릿을 열고 내용을 수정 한 다음 문서를 다시 저장합니다. 이 모든 작업은 Office 2007을 사용하는 Windows Server 2003 또는 XP 컴퓨터에서 수행 할 때 매우 효과적이었습니다. 모든 것을 Server 2008 상자로 옮기면 모든 것이 끊어졌습니다. 예를 들어 Excel에서는 파일이 명확하게 존재할 때 Excel 파일을 열 수 없다는 COM 예외가 발생하며 수동으로 처리 할 때 열 수 있습니다. Windows 서비스는 컴퓨터에 로그인하는 것과 동일한 사용자 계정으로 실행되며 해당 계정은 관리자입니다.

누구에게 무엇을해야할지 모르십니까?

답변

1

Office 클라이언트를 서버 측 응용 프로그램으로 실행하지 마십시오. xml을 파일 형식으로 사용하는 것을 고려하십시오 (Office 2007의 경우 xlsx, 이전 버전의 경우 Excel 통합 문서 xsd 사용). 그러면 서버에서 Excel API를 사용할 필요가 없습니다.

0

서버에 기본 interop 어셈블리가 설치되어 있습니까? 이들은 일반적으로 GAC에 있으며 프로그램을 빌드 할 때 bin 디렉토리에 포함되지 않으므로 서버에 로컬로 설치해야합니다.

+0

예, Interops는 GAC에 있습니다. – Rob

1

Microsoft에서 Office 자동화를 기본적으로하지 말고 interesting article을 찾았습니다.

+0

그래, Office 2007에서는 Office Open XML 또는 기타 파일 형식으로 파일 형식을 다시 지정하여 Office 응용 프로그램 중 하나를 회전하지 않고도 파일의 내용을 직접 조작 할 수 있습니다. Word 또는 Excel을 회전시키는 유일한 이유는 지금 인쇄해야합니다. – sliderhouserules

0

이것은 단지 추측이지만 UAC 일 수 있습니다. 나는 권한있는 (admin) 응용 프로그램과 사용자 응용 프로그램이 서로에게 메시지를 보내거나 어떤 식 으로든 통신 할 수 없다는 것을 알고 있습니다. 서비스는 관리자로 실행되지만 동일한 사용자인데도 UAC의 일반 사용자로 실행됩니다. 또한 Office가 시작할 때 자체로드 된 부분을 시작했으며 일반 사용자로 실행될 것으로 예상됩니다.

UAC를 끄고 도움이되는지 확인해보십시오. 그렇다면 적어도 그것이 무엇인지 알 것입니다.

+0

UAC를 끄고 같은 결과를 얻었습니다. – Rob

0

컴퓨터에 로그온 한 상태로 두시겠습니까? Office는 서버 측 응용 프로그램이 아니기 때문에 데스크톱 컨텍스트없이 실행 파일을 실행하려고하면 임의의 오류가 발생합니다.

0

Office에 대해 기억해야 할 사항. x86 전용이므로 x64에서 응용 프로그램을 만드는 경우 Office 기본 COM 개체에 액세스 할 수 없습니다. x86에서 응용 프로그램을 컴파일해야 할 것입니다.

프로젝트 속성으로 이동하여 Visual Studio의 빌드 탭에서 x86을 선택하면됩니다.

귀하의 앱이 x64 환경에서 개발/실행되고 있다고 가정합니다.

2

Vista 및 Windows Server 2008에서 서비스는 Session0이라는 서비스로 실행됩니다. Vista 이전에는 일반 프로그램이 서비스와 함께 Session0에서 실행되었습니다.

즉, Session0은 서비스가 explorer.exe에 액세스 할 수없는 데스크탑이없는 황무지가되었음을 의미합니다.문제는 Office 응용 프로그램이 일반적으로 데스크톱에있는 몇 가지 구성 요소에 액세스 할 수 있기를 기대하고 있다는 것입니다.

  1. 이 서비스의 속성의 로그온 탭에서 바탕 화면의 체크 박스를 설정하고 그것을기도 : 데스크탑에만 에드 세션을 지원하는 등 엑셀, 워드, 이후

    , 당신은 단지 몇 가지 선택이있다 오피스 신을 달래 준다. (아마도 그렇지는 않습니다.)

    • 1을 시도한 후에 코드를 살펴보고 충돌이 발생하도록 시도하거나 제거하십시오.
  2. interop 작업을 수행하는 서버를 만들기 위해 remoting/WCF를 사용하고 서비스와 통신합니다.
    • 로그인 한 대화 형 사용자가 있어야하며 사용자는 어떻게 든 서버 응용 프로그램을 시작해야합니다. 아마도 자동 시작을 사용하는 것이 가장 좋습니다.
    • 자동 로그인을 사용하도록 설정할 수 있습니다. http://support.microsoft.com/kb/324737
  3. CreateProcessAsUser 및 친구를 사용하여 로그인 한 사용자를 가장하려고하십시오.
    • 참고 : 실제로 사용자가 로그인하지 않으면 얼마나 잘 작동하는지 알 수 없으므로 위의 2보다 유용하지 않을 수 있으며 더 이상 배울 수 없습니다. (필요 P/Invoke)
  4. 프로그램을 OpenXML sdk를 사용하거나 SpreadsheetGear와 같은 것을 사용하도록 다시 작성하십시오.