2014-10-21 3 views
1

Google에서 수년 동안 PDF, HTML 문서 및 XBRL 문서에서 사용해온 코드가 있습니다. 이 코드는 IE의 BHO 또는 Reader의 Adobe 플러그인에서 호출됩니다. ROT에 모니 커를 등록하고 신호 이벤트를 만듭니다.설치된 adobe 11에서 ROT 등록이 작동하지 않습니다.

우리는 Adobe 9에서 Adobe 11으로 업그레이드하려고 시도해 왔으며 코드를 디버깅하기 만하면 ROT에 모니 커를 등록하지 못합니다. Adobe 9 플러그인에서 호출되고 BHO에서 호출 된 경우 작동합니다. 그러나 단순히 Adobe 11로 업그레이드하는 것만으로도 자동으로 실패하지 않게 할 수 있습니다.

문제의 코드

은 다음과 같습니다 :

void CLocatorRegistration::Register(ISourceLocator* pLocator, long nKeyFile) 
{ 
    HRESULT hr; 
    CComPtr<IRunningObjectTable> pROT; 
    CComPtr<IMoniker> pmk; 
    CComBSTR bstrName; 

    // access the ROT 
    pROT = GetROT(); 

    // create the moniker 
    pmk = CreateMoniker(nKeyFile); 

    // put this object in the ROT. 
    _ASSERTE(!m_bRegistered); 
->>hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pLocator, pmk, &m_dwROTCookie); 
    if FAILED(hr) 
     throw hr; 
    m_bRegistered = true; 

    // create the event and signal it, to support notification to any callers that this object 
    // is now available to connect to 
    CreateEventName(nKeyFile, bstrName); 
    m_hEvent.Attach(::CreateEvent(NULL, TRUE, FALSE, bstrName)); 
    ::SetEvent(m_hEvent); 
} 

강조 표시된 라인은 ROT 등록, 그리고 반환 S_OK입니다. 누구나 어떤 방법으로 성공할 수 있는지 알 수 있습니까?하지만 항목을 ROT에 넣지 마십시오.

+1

아마도 상승 모드 때문입니까? 시도하기 위해 일시적으로 UAC를 끄고 차이가 있는지 확인하십시오. – Noseratio

+1

@Noseratio - 좋은 생각 ...하지만 우리 자신의 앱 덕분에 UAC는 이미 꺼져 있습니다. 하지만 나는 네가 무언가를하고 있다고 생각한다. 내 ROTViewer가 ROT에 표시하지 않고 다른 응용 프로그램이 액세스 할 수 없더라도 외부의 코드가 아닌 ROT 항목에 액세스하려고 시도했지만 액세스 할 수있었습니다. –

답변

0

내가 조사한 문제는 Adobe 11에 새로운 샌드 박스 보호 모드 설정이 포함되어 있다는 사실이었습니다. 플러그인을 개발할 때 더 이상 기본적으로 OS에 액세스 할 수 없습니다.

내부 응용 프로그램 용이므로이 설정을 사용하지 않도록 설정하는 것이 매우 간단합니다. 이 작업을 수행하는 데는 여러 가지 방법이 있지만 시간 제약으로 인해 조사하지 않았습니다.

Adobe 11 Protected Mode

관련 문제