Неадминистративная регистрация элементов управления ActiveX - PullRequest
2 голосов
/ 04 февраля 2010

в соответствии с Элементы управления ActiveX без прав администратора , возможно зарегистрировать activeX под текущим пользователем (для этого не потребуется права администратора во время установки). Я разработал проект ATL (VS2008, нативный) и добавил элемент управления ATL, который ничего не делает.

Я создал файл inf:

    [version]
    signature="$CHICAGO$"
    AdvancedINF=2.0

[Add.Code]
     Batman.dll=Batman.dll

[Deployment]
    InstallScope=user

[Batman.dll]
    file-win32-x86=thiscab
    clsid={2C10EC82-2BF3-4ED5-8AFC-E5146C672B3D}
    FileVersion=1,0,0,1
    RegisterServer=yes

Добавьте как dll, так и inf в CAB и подписайте его. Я загружаю ActiveX с простой HTML-страницы

<OBJECT ID="sampleControl" CLASSID="CLSID:2C10EC82-2BF3-4ED5-8AFC-E5146C672B3D" CODEBASE="Batman.cab#Version=1,0,0,1"></OBJECT>

И это никак не регистрирует его под текущим пользователем.

В случае, если я укажу InstallScope = машина, проблем нет, ActiveX загружен.

Есть идеи, что делать?

Спасибо

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Я сталкиваюсь с той же проблемой, но самое странное то, что с Apache Server все в порядке, а с Tomcat Server - нет.

Наконец, я обнаружил, что это также связано с настройкой веб-сервера.

Ваш веб-сервер ДОЛЖЕН поддерживать правильное отображение MIME-типов. Если вы тестируете с Tomcat, добавьте следующее в web.xml:

<mime-mapping>
    <extension>cab</extension>
    <mime-type>application/vnd.ms-cab-compressed</mime-type>
</mime-mapping>
1 голос
/ 01 декабря 2010

С версией ATL, поставляемой с VS2008, вы можете сделать это с помощью:

AtlSetPerUserRegistration (TRUE);

Вызовите это в DllRegisterServer и DllUnregisterServer в начале. Если вам нужно сделать это в vs2005 или более ранней версии, вам придется использовать более опасный хак.

Пример класса, который заботится о обоих методах для вас (в зависимости от версии), здесь: https://github.com/firebreath/FireBreath/blob/master/src/ActiveXCore/axutil.cpp

и пример использования здесь: https://github.com/firebreath/FireBreath/blob/master/src/PluginAuto/Win/FireBreathWin.cpp

Надеюсь, это поможет

0 голосов
/ 05 февраля 2010

Попробуйте, по крайней мере, у меня это работает:

[Deployment]    
  InstallScope=user|machine

[Batman.dll]
  file-win32-x86=thiscab
  clsid={2C10EC82-2BF3-4ED5-8AFC-E5146C672B3D}
  FileVersion=1,0,0,1
  RegisterServer=yes
  RedirectToHKCU=yes

Элементы управления ActiveX без прав администратора

...