2012-04-20 2 views
4

Interop.domino.dll 어셈블리를 사용하여 도미노/노트와 상호 작용하여 문서를 작성, 업데이트 및 삭제하는 C# 콘솔 응용 프로그램을 작성했습니다. 응용 프로그램은 cmd 프롬프트 나 Visual Studio를 통해 수동으로 실행될 때 성공적으로 실행됩니다. 우리가 (도메인 서비스 계정으로 실행) 예약 된 작업으로 응용 프로그램을 설정하려고 할 때 그러나, 다음과 같은 오류와 함께 실패합니다Interop.domino.dll을 사용하는 C# 콘솔 앱 - 예약 된 작업으로 실행시 실패

  • 함께 System.Runtime.InteropServices.COMException : 구성 요소의 COM 클래스 팩터 리를 검색 오류로 인해 CLSID {29131539-2EED-1069-BF5D-00DD011186B7}이 (가) 실패했습니다. 80004005 지정되지 않은 오류 (HRESULT의 예외 : 0x80004005 (E_FAIL)).

오류는 시도는 다음에 따라, NotesSession 오브젝트의 인스턴스를 생성하기 위해 특별히 때, 바로 우리가 Interop.domino.dll에서 개체를 사용하려고으로 발생

  • ISession notesSession = new NotesSession();

몇 가지 조사를 한 후 interop 어셈블리가 데스크톱과 상호 작용해야하며 예약 된 작업이 예약 된 작업에서 실행중인 컴퓨터에 로그인 한 서비스 계정으로 예약 된 작업을 실행해야한다는 것을 알게되었습니다. 서비스 계정으로 로그인하는 동안 응용 프로그램이 실행되는 동안 svchost.exe 창이 나타나서 바탕 화면이 필요한 이유입니다.

그러나 컴퓨터에 서비스 계정을 로그인하면 항상 서버를 다시 시작할 때마다 계정을 다시 로그인해야한다는 의미에서 용인 할 수 없습니다. 또한 서비스 계정이 시스템에 로그인하도록 허용하는 것과 관련된 몇 가지 보안 문제가 있습니다.

누군가이 문제를 해결하는 방법에 대한 제안 사항이 있으시면 궁금합니다. 어셈블리가 표시하려고하는 UI를 억제하는 방법이 있습니까? 또는 비슷한 결과를 얻을 수있는 예약 된 작업을 대체 할 사람을 제안 할 수 있습니까? 우리가해야 할 일은 다음과 같습니다

  • 가 설정된 간격으로 응용 프로그램 실행 한 - A와 반대 (이 도메인 서비스 계정으로 실행이 이상적 (IE 하루에 한 번/한 시간에 한 번)
  • 을 로컬 시스템 계정) 서비스 계정을 필요로하지 않고
  • 실행하여 시스템에 로그인 할 /를 Interop.domino.dll의 UI 요소는

우리는 노트 웹을 활용 유사한 응용 프로그램을 작성에 대한 생각을 억제 서비스가 아니라 Interop assmebly 우리가 만약 그 경로를 내려갈 것입니다 콘솔 앱을 예약 된 작업으로 실행시키지 마십시오. 그러나 가능한 경우 이미 작성한 내용을 사용하고 싶습니다.

업데이트 01/05/12

내가 @ DNA 남자 솔루션에 따라, NOTESNTSERVICE OS 환경 변수를 랩탑 설치 시도했습니다. 그러나 이것은 문제를 해결하지 못했습니다.

지금까지 우리는 응용 프로그램을 로컬 시스템 계정에서 실행되는 Windows 서비스로 설정하고 데스크톱과의 대화 형 작업을 허용했습니다.이는 쉽게 계획 할 수 없으며 도메인 서비스 계정으로 실행되지 않지만 응용 프로그램이 작동하므로 이상적인 방법이 아닙니다. 이제는이 방법을 사용할 것입니다.

이 접근법을 제안하는 답변이 있지만 정확한 것으로 표시 할 수 없도록 삭제 된 것으로 보입니다. 다른 사람에게 제안이 있는지 확인하기 위해 질문을 공개적으로 남겨 둘 수 있습니다.

+1

Domino 서버가있는 경우 기본 Notes Agent를 실행하지 않는 이유는 무엇입니까? – leyrer

+1

이것은 interop 어셈블리와 관련이 없으며 선언과 코드가 포함되어 있습니다. 지원을 받으려면 IBM에 문의하십시오. –

+0

@leyrer - 우리는 C# 응용 프로그램을 작동시키지 못하면 작업을 수행하기 위해 노트 작성기를 작성할 수 있습니다. 그러나 앱의 개발 단계에서 늦게이 문제를 발견 한 경우 가능한 경우 이미 작성한 내용을 사용하고 싶습니다. –

답변

0

응용 프로그램을 로컬 시스템 계정에서 실행중인 Windows 서비스로 설정하고 데스크탑과의 대화 형 작업을 허용하도록 약간 수정했습니다. 이는 쉽게 예약 할 수 없으며 도메인 서비스 계정으로 실행되지 않기 때문에 이상적이지 않습니다. 그러나이 방법을 사용하면 계정을 항상 로그인하지 않아도 응용 프로그램을 실행할 수 있으며 interop UI 요소를 표시 할 수 있으므로 오류가 발생하지 않습니다.

Windows 서비스가 일정한 간격 (하루에 한 번 설정)으로 작업을 수행하도록 예약하려면 타이머 제안 솔루션 here을 사용했습니다.

0

정확하게 이유는 말할 수 없지만 Lotus interop 클래스의 레지스트리 정보를 읽지 못하고 있다고 생각합니다. 분명히 항목이 있습니다. 그렇지 않으면 수동으로 실행하는 동안 작동하지 않습니다. 그럼 다른 가능성을 생각해 봅시다.

이 경우 가능할지 모르겠지만 수동으로 실행하면 32 비트로 실행되지만 실행시 64 비트로 실행됩니까? IBM은 Win64에서 Domino COM 클래스를 지원하지 않으며 그 첫 번째 증상은 레지스트리라는 것입니다.

서비스 계정에는 읽기 전용 액세스 권한이 없다는 것이 더 평범한 경우 일 수 있습니다 소프트웨어가 특정 사용자 계정으로 설치 되었기 때문에 컴퓨터에 설치된 Notes/Domino의 레지스트리 항목.

+0

서비스 계정의 레지스트리 사용 권한을 조사하지는 않았지만 예약 된 작업이 실행중인 서비스 계정이 시스템에 로그온되어있는 경우 올바르게 실행되는 이유를 설명하지 못했습니다.서비스 계정에 레지스트리 읽기 권한이없는 경우 서비스 계정이 시스템에 로그온되어 있어도 실패 할 수 있습니다. 따라서 레지스트리 권한 문제는 아닌 것 같습니다. –

+0

32 비트 대 64 비트 제안과 관련하여 예약 된 작업은 서비스 계정이 시스템에 로그인 되어도 완전히 실패하지는 않습니다. 그것이 이것 때문에 생긴 것이라면, 그것은 항상 작동하지 않을 것입니다. 그래서, 나는 가능성으로 그것을 배제 할 수 있다고 생각합니다. –

+0

글쎄, 난 여전히 레지스트리 읽기 오류, 그리고 내가 올 수있는 최선의 대답은 그것이 실제로 로그인하지 않는 한 어떤 이유로, 도메인 서비스 계정은 권한이 없다고 생각합니다. 거기에 어떤 안티 맬웨어/방화벽/침입 방지 소프트웨어가 컴퓨터에 설치되어 있습니까? 오류 코드 0x80004005로 인터넷 검색, 몇 가지 경우에 연루된 그런 종류의 것을 참조하십시오. 다른 제안은 도메인 서비스 계정 (다른 계정으로 설치 한 경우)을 사용하여 Domino를 다시 설치하거나 활성 지원 계약이있는 경우 IBM에 전화하는 것입니다. –

1

코드가 Domino 서버에서 실행중인 경우 OS 환경 변수 NOTESNTSERVICE = 1이 설정되어 있는지 확인해야합니다. 이 환경 변수는 Lotus C API 문서에서 더 많이 찾을 수 있지만 서비스로 실행될 때 COM API에도 적용됩니다. 2003 년에 서비스로 실행해야했던 VB.NET 응용 프로그램을 다시 만들고이 환경 변수를 설정하는 것이 핵심이었습니다. 설정되지 않은 경우 시스템에서 로그 오프하는 즉시 서비스가 중지됩니다. 미래에 서비스를 설치할 때 누군가이 환경 변수를 설정하는 것을 잊지 않았는지 확인하기 위해 서비스 관리자 시작 코드가 SetEnvironmentVariable에 대한 VB.NET 호출을 사용하여 시작시이 환경 변수를 직접 설정하도록했습니다. Domino 세션 오브젝트를 작성하기 전에이를 설정해야했습니다.

+0

고마워, 나는 이것을 잠재적 인 해결책으로 들여다 보겠다. 우리는 서비스가 아닌 스케줄 된 작업을 사용하고 있지만 당신이 그것을 설명하는 방법에서 나는 그 환경 변수를 설정하는 것이 예정된 작업을 위해서도 효과가있을 것이라고 추측하고 있습니다. –

+0

나는 이것을 조사하고이 환경 변수를 설정해도 문제가 해결되지 않았다. 그것은 설정 될 필요가있을 수도 있지만 데스크탑과 상호 작용할 필요성을 억제하는 것처럼 보이지는 않습니다. –

관련 문제