문제

MS Office 2007 .NET C# interop 라이브러리를 Vista와 함께 작동시키는 방법을 아는 사람이 있습니까?

Windows 서비스로 실행하도록 설정 한 .NET C# 응용 프로그램이 있습니다. 이 프로그램은 상황에 따라 단어 또는 Excel 템플릿을 열고 내용을 수정 한 다음 문서를 다시 저장합니다. 이 모든 것이 Office 2007을 사용하여 Windows Server 2003 또는 XP Machine에서 수행 할 때 훌륭하게 작동했습니다. 모든 것을 Server 2008 상자로 옮겼을 때 모든 것이 작동하지 않습니다. 예를 들어 Excel에서는 파일이 명확하게있을 때 Excel 파일을 열 수 없으며 수동으로 수행 할 때 잘 열 수 있다는 COM 예외가 발생합니다. Windows Service는 시스템을 사용하여 컴퓨터에 로그인하는 것과 동일한 사용자 계정으로 실행 중이며 해당 계정은 관리자입니다.

누구든지 무엇을 해야할지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

사무실 클라이언트를 서버 측 앱으로 실행하는 것을 실제로 피해야합니다. XML을 파일 형식으로 사용하거나 (Office 2007 용 XLSX 또는 (다소) 이전 버전에 Excel Workbook XSD를 사용하는 것을 고려하십시오.) 서버에서 Excel API를 사용하지 않아도됩니다.

다른 팁

Vista 및 Windows Server 2008에서 서비스는 Session0이라는 제품으로 실행됩니다. Vista 전에 정기 프로그램은 서비스와 함께 Session0에서 실행됩니다.

즉, Session0은 서비스가 Explorer.exe에 액세스 할 수없는 데스크탑없는 황무지가되었음을 의미합니다. 문제는 사무실 애플리케이션이 일반적으로 데스크탑에있는 몇 가지 구성 요소에 액세스 할 수있을 것으로 기대하고 있다는 것입니다.

Excel, Word 등은 데스크탑 엔드 세션에서만 지원되므로 몇 가지 선택 사항 만 있습니다.

  1. 서비스 속성의 로그온 탭에 데스크탑 확인란을 설정하고 사무실 신들에게 항해하도록기도하십시오. (아마도 그렇지 않을 것입니다.)
    • 1을 시도한 후 코드를 살펴보고 충돌하는 모든 것을 주변에서 시도하고 제거하십시오.
  2. 원격/WCF를 사용하여 인터 로프 작업을 수행하는 서버를 만들고 서비스와 통신하도록하십시오.
    • 대화식 사용자에 로그인해야하며 사용자는 어떻게 든 서버 응용 프로그램을 시작해야합니다. 아마도 AutosTart를 사용하는 것이 가장 좋습니다.
    • 자동 로그인을 켤 수 있습니다. http://support.microsoft.com/kb/324737
  3. CreateProcessAsuser 및 친구를 사용하여 로그인 한 사용자를 가장하십시오.
    • 참고 : 사용자가 실제로 로그인하지 않는 한 이것이 얼마나 잘 작동하는지 모르겠으므로 위의 2보다 유용하지 않을 수 있으며 끌기가 훨씬 어려울 수 있습니다. (P/Invoke 필요)
  4. OpenXML SDK를 사용하거나 스프레드 시트 기어와 같은 것을 사용하도록 프로그램을 다시 작성하십시오.

나는 찾았다 흥미로운 기사 Microsoft에서 기본적으로 사무실 자동화를하지 않는다고 말합니다.

설치 가능성을 얻으십시오http://www.microsoft.com/downloads/details.aspx?familyid=59daebaa-bed4-4282-a28c-b864d8bfa513&displaylang=en

시스템에 설치하고 솔루션에서 Excel DLL을 참조하면 작동하기를 바랍니다.

서버에 기본 인터 로프 어셈블리가 설치되어 있습니까? 이들은 일반적으로 GAC에 위치하고 프로그램을 구축 할 때 빈 디렉토리에 포함되지 않으므로 서버에 로컬로 설치해야합니다.

이것은 단지 추측 일이지만 UAC 일 수도 있습니다. 권한이있는 (관리자) 응용 프로그램 및 사용자 애플리케이션은 서로에게 메시지를 보내거나 어떠한 방식 으로든 의사 소통 할 수 없다는 것을 알고 있습니다. 귀하의 서비스는 관리자로 실행되고 있지만 데스크탑은 동일한 사용자이더라도 UAC에서 일반 사용자로 실행됩니다. 또한 스타트 업에서 사무실이 (사전로드 된) 부분을 시작했으며 이는 일반 사용자로 실행될 것으로 기대합니다.

UAC를 끄고 도움이되는지 확인하십시오. 그렇다면 적어도 당신은 그것이 무엇인지 알고 있습니다.

계정을 컴퓨터에 로그온하게합니까? Office는 서버 측 앱이 아니며 데스크탑 컨텍스트없이 실행 파일을 시작하려고하면 임의의 오류가 발생합니다.

사무실에 대해 기억해야 할 것. x86 만 있으므로 x64에서 응용 프로그램을 작성하는 경우 COM 개체의 기본 사무실에 액세스 할 수 없습니다. 응용 프로그램을 x86로 컴파일해야합니다. 그러면 작동합니다.

프로젝트의 속성에 들어가서 Visual Studio의 빌드 탭에서 x86을 선택하여 그렇게 할 수 있습니다.

이것은 모두 X64 Enviroment에서 앱이 개발/실행되고 있다고 가정합니다.

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