2010-02-04 6 views
2

selon Non-Admin ActiveX Controls, il est possible d'enregistrer activeX sous l'utilisateur actuel (qui ne nécessitera pas de droits d'administrateur pendant l'installation). J'ai mis en caisse un projet ATL (VS2008, natif) et ajouté un contrôle ATL qui ne fait rien.Enregistrement non-administrateur des contrôles ActiveX

J'ai créé un fichier .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 

Ajouter à la fois la dll et CAB et dans .inf signé. je charge un ActiveX de simple page html

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

Et il ne l'enregistre pas sous utilisateur courant de toute façon.

I Cas que je spécifie InstallScope = machine il n'y a pas de problème le activeX est chargé.

Une idée de ce qui devrait être fait?

Merci

Répondre

0

Essayez ceci, au moins ça marche pour moi:

[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 

Non-Admin ActiveX Controls

+0

Merci, quand je l'ai modifié mon inf, quand je me connecte comme non-admin et essayer d'accéder à la page qui charge ActiveX, je reçois un message si je veux l'installer pour la machine ou pour l'utilisateur actuel. Même si je choisis de l'installer pour l'utilisateur actuel, l'ActiveX n'est pas chargé. Je ne peux pas non plus le trouver en HD ou en registre ... Pensez-vous qu'il est nécessaire de modifier le fichier rgs ou tout ajout nécessaire dans la page HTML? Merci – Zaky

+0

Je pense que la cause n'est pas dans la fonction "Non-administrateur". Au moins dans mon cas, les modifications du fichier INF étaient suffisantes. Je n'ai pas touché d'autres fichiers. Vous pouvez essayer de l'installer pour tous les utilisateurs, juste pour tester. Assurez-vous que les numéros de version sont identiques (1,0,0,1! = 1.0.0.1), assurez-vous que vous utilisez bien clsid dans le fichier INF. – Eugene

+0

J'ai trouvé utile d'essayer d'enregistrer manuellement ma DLL via la ligne de commande, par exemple: regsvr32 cela indique si l'enregistrement par lui-même fonctionne ou pas. – Spike0xff

1

Avec la version d'ATL qui vient avec VS2008, vous pouvez le faire avec:

AtlSetPerUserRegistration (TRUE);

Appelez cela dans DllRegisterServer et DllUnregisterServer au début. Si vous avez besoin de le faire dans vs2005 ou plus tôt, vous devrez utiliser un hack plus effrayant.

Un exemple d'une classe qui prend en charge les deux méthodes pour vous (en fonction de la vs ver) est ici: https://github.com/firebreath/FireBreath/blob/master/src/ActiveXCore/axutil.cpp

et l'utilisation d'exemple ici: https://github.com/firebreath/FireBreath/blob/master/src/PluginAuto/Win/FireBreathWin.cpp

J'espère que cela aide

2

Je rencontre le même problème, mais la partie la plus étrange est, ça va avec Apache Server, mais pas avec Tomcat Server. Enfin, je l'ai trouvé également lié au paramètre de serveur Web.

Votre serveur Web DOIT prendre en charge le mappage de type mime correct. Si vous testez avec Tomcat, ajoutez ce qui suit à web.xml:

<mime-mapping> 
    <extension>cab</extension> 
    <mime-type>application/vnd.ms-cab-compressed</mime-type> 
</mime-mapping> 
Questions connexes