ROT注册不适用于安装的adobe 11

时间:2014-10-21 17:23:10

标签: c++ com adobe

我拥有多年来使用PDF,HTML文档和XBRL文档的代码。代码从IE中的BHO或Reader中的Adobe插件调用。它在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 个答案:

答案 0 :(得分:0)

我在研究这个问题时发现的问题是Adobe 11包含一个新的沙盒保护模式设置。在开发插件时,默认情况下它不再可以访问操作系统。

就我们的目的而言,禁用此设置非常简单,因为这是针对内部应用程序的。还有很多其他方法可以实现这一点,但由于时间限制,我们没有调查它们。

Adobe 11 Protected Mode