2012-08-02 20 views
1

가끔 "오류 HRESULT E_FAIL이 (가) COM 구성 요소 호출에서 반환되었습니다." ShellWindows 클래스를 반복 할 때 오류가 발생합니다. 컴퓨터가 잠에서 깨어 난 후에 주로 일어나는 것처럼 보입니다. 이 오류를 해결하려면 컴퓨터를 다시 시작해야합니다.ShellWindows에서 반복되는 오류

오류는 다음 코드에서 "foreach는"루프 라인에서 발생 : 나는 닷 넷 프레임 워크 3.0 용으로 컴파일하고

log.Debug(String.Format("new ShellWindowsClass")); 
ShellWindows m_IEFoundBrowsers = new ShellWindowsClass(); 

log.Debug(String.Format("Loop begin")); 
foreach (InternetExplorer Browser in m_IEFoundBrowsers) 
{ 
    log.Debug(String.Format("Browser {0} ?= {1}", Browser.HWND, pid)); 
    if (Browser.HWND == pid) 
    { 
     found = Browser; 
     break; 
    } 
} 
log.Debug(String.Format("Loop end")); 

.

컴퓨터를 다시 시작하는 것 외에이 오류를 해결하기위한 제안 사항이 있습니까?

+0

컴퓨터가 완전히 깨어 난 후에 발생합니다. –

+0

내 대답을 삭제했습니다. 나는 이것에 관해 많이 모른다. http://weblogs.asp.net/joberg/articles/405283.aspx 링크가 COM 구성 요소가 중간 상태에 있고 추측 할 수 없다는 추측에 따라 도움이 될 수 있다고 생각했습니다. 문제를 일으켜서 미안 해요. – Ankush

답변

2

this thread에서 해결책을 찾았습니다. 문제는 루프가 시작될 때가 아니라 첫 번째 디버그 로깅 문에서 발생합니다. 이 코드 라인은 실패한 것입니다.

log.Debug(String.Format("Browser {0} ?= {1}", Browser.HWND, pid)); 

Browser.HWND이 예외를 던지고 있기 때문에 실패하고 있습니다.

해결 방법은 Browser 변수를 검사하고 해당 프로세스 이름을 확인하는 것입니다. 이 같은 프로세스 이름을 가져옵니다 : processName 될 수 있도록

string processName 
    = System.IO.Path.GetFileNameWithoutExtension(Browser.FullName).ToLower(); 

는 이렇게, 나는 일반적으로 값을보고 다음 중 하나

  1. "iexplore"
  2. "explorer"

processName="explorer", 전화 Browser.HWND으로 설정하면 "오류 HRESULT E_FAIL이 COM 컴파일에 대한 호출에서 반환되었습니다. nt. " 오류.

if (processName.Equals("iexplore")) { . . . } 

을 그리고 문이 참이 경우 경우에만 작동 :

는 경우 문을 추가, 오류를 방지합니다.