2010-03-28 6 views
1

J'ai besoin de porter une suite d'applications Windows (fonctionnant sous XP avec peu de sécurité activée) à Windows 7 avec différents niveaux de sécurité, selon la configuration de nos clients. Chaque zone fonctionnelle est un exécutable ou une DLL séparée qui est téléchargée et enregistrée par une application centrale «composée». Cela signifie que les différentes parties sont réunies pour former une grande application unique.Création d'applications complexes sous Windows 7

Mon problème est que l'application composée connaît les autres applications via COM registery, soit comme une typelibrary ou comme OCXs, le cas échéant. J'ai essayé plusieurs questions ici pour essayer de résoudre les problèmes que je reçois, mais je ne semble pas pouvoir contourner le problème d'avoir un accès élevé pour enregistrer des applications et accéder au registre. Nos clients s'attendent au même processus de téléchargement et d'activation (relativement) sans effet que sous XP.

Donc, quelqu'un a-t-il une solution pour enregistrer des bibliothèques de types et des contrôles OCX sans avoir à passer par un processus d'élévation?

Mise à jour:

Les solutions ne doivent pas nécessairement être en Delphi, la résolution de ce pour toutes les langues me aiderait énormément.

Merci à l'avance

Répondre

2

Je pense que je l'ai résolu. Si vous remplacez les DllRegisterServer et DllUnRegisterServer méthodes pour chaque OCX, et les redirigez l'accès au registre HKCR ruche HKCU, puis changer RegisterTypeLibrary de comserv.pas appeler RegisterTypeLibForUser lorsque l'appel échoue RegisterTypeLib, puis les contrôles OCX peuvent être enregistrés sans avoir besoin d'élévation . Je pense que le vrai est aussi de typelibraries. Le secret est que le contrôle OCX doit être modifié, plutôt que les programmes qui l'enregistrent.

Je ne sais pas si je l'ai encore résumé correctement!

0

Enregistrement des applications COM etc nécessite la création de clés et des valeurs sous HKLM &/ou HKCR dans le Registre. Pour écrire dans ces ruches de registre, une application DOIT être élevée. Par exemple, les programmes d'installation de Win7/Vista s'exécutent automatiquement, ce qui incite les utilisateurs au démarrage avec une invite UAC (à moins que vos utilisateurs n'aient probablement désactivé le contrôle UAC).

Je pense que vous aurez besoin de rééduquer doucement vos clients avec des attentes modifiées pour Vista/Win7. Si vous essayez d'écrire dans HKLM etc sans être élevé, vous rencontrerez probablement des problèmes où Vista/Win7 virtualise votre accès au registre et votre application n'écrit pas là où elle pense écrire.

Il y a quelques réponses SO here et here qui devraient fournir tout ce que vous devez savoir pour que votre app Delphi (ou une partie de celle-ci) soit élevée.

+0

Qu'est-ce qui ajoute RegisterTypeLibForUser? Ai-je besoin d'un accès élevé pour cela? – Mmarquee

+0

Je ne suis pas certain. Nous voulions que nos serveurs COM etc. soient enregistrés pour n'importe quel utilisateur. Vous avez également posé des questions sur "l'accès au registre", que j'ai supposé signifier l'accès au registre par exemple. HKLM en général.Indépendamment de l'enregistrement de la bibliothèque de types, vous aurez besoin d'un accès élevé pour pouvoir écrire sur HKLM ou HKCR (si vous ne courez pas sur un niveau élevé, je pense que vous allez écrire dans une vue virtualisée du registre). –

+0

L'accès à HKLM peut être changé, l'enregistrement de Typelibraries est le problème - Delphi semble seulement faire des contrôles qui accèdent à HKLM - plutôt que HKCU. Je dois admettre que je suis un peu perdu avec ça. – Mmarquee