2009-03-17 8 views
3

J'ai une application VB6 qui doit être installée sur Windows Vista en tant qu'utilisateur standard. À l'aide de Visual Studio 2005, j'ai créé un projet d'installation qui placera l'application dans un emplacement ou un dossier standard sécurisé. J'ai aussi une DLL que je veux installer et enregistrer dans le dossier de données de l'application des utilisateurs. Une fois que mon programme d'installation Windows est créé dans VS'05, j'ai inversé le troisième bit des propriétés de comptage de mots en utilisant msiinfo.exe afin que Vista n'invite pas les informations d'identification Admin lorsqu'il exécute le msi. L'application s'installe sans aucun problème jusqu'à ce qu'elle tente d'enregistrer la DLL dans le dossier de données de l'application des utilisateurs. Quand il atteint ce point, il génère une erreur indiquant qu'il ne peut pas enregistrer la bibliothèque de types pour la DLL. Il semble que le programme d'installation n'ait pas l'autorisation d'enregistrer une DLL dans le dossier des utilisateurs. Est-ce correct? Ma compréhension était que Vista se plaignait uniquement de la mise à jour ou de la modification d'éléments par les utilisateurs standard qui affectaient tous les utilisateurs d'une machine. Des idées? Pensées? Suggestions?Installation de VB6 sous Windows Vista en tant qu'utilisateur standard

+0

J'ai pris la liberté de marquer ce "regfreecom" parce que je pense que cela va être la bonne réponse au problème. Je me rends compte que c'est peut-être un peu tôt car Steven ne l'a pas encore essayé ... – MarkJ

+0

@MarkJ: Je pense que vous ne devriez pas contourner les questions d'étiquetage avec ce que vous pensez être la bonne réponse. Ce n'est pas ce que les tags sont pour, c'est ce que les réponses sont pour. Il semble que COM sans Reg fonctionne pour les références COM dans les assemblys .NET uniquement. – Tomalak

+0

@Tomalak. Merci pour vos commentaires. En fait, COM sans reg fonctionne également avec les références COM utilisées par les clients VB6, par exemple l'outil MakeMyManifest ne fonctionne que pour les clients VB6. Ou lisez l'article mentionné dans ma réponse. – MarkJ

Répondre

4

Steve

Ma suggestion est, si vous le pouvez, d'utiliser regfree com/manifest files au lieu d'enregistrer les fichiers ocx/dll, qui, comme vous le mentionnez, est une véritable corvée sous un compte d'utilisateur de base.

Il y a une excellente application gratuite que vous pouvez utiliser pour construire le manifeste aussi bien pour vous ici: http://mmm4vb6.atom5.com/

Nous utilisons ce depuis quelques années maintenant, sans problème.

EDIT Le site Web MMM est en panne. Je vois here que l'auteur avait des problèmes avec leur hébergement et a fourni un autre endroit pour obtenir Make My Manifest - download it here.

+0

Salut, Steve a eu quelques problèmes avec MMM, dont il est documenté dans une autre réponse. Peut-être que si vous avez le temps, vous pouvez vous arrêter et voir si vous avez un aperçu basé sur votre expérience, je pense qu'il serait reconnaissant. À votre santé. – MarkJ

-1

L'inscription d'une DLL a un impact sur tous les utilisateurs (les DLL sont enregistrées globalement) et nécessite donc des autorisations d'administration. Il n'y a pas de chemin aux alentours. La solution pour les environnements de programmation plus récents est que la DLL n'a pas besoin d'être enregistrée pour être utilisée. Cependant, puisque vb6 s'appuie sur COM, vous n'avez probablement pas de chance.

+0

pas tout à fait pas de chance ... en fait c'est ce que reg COM gratuit est pour .. Comme dans les autres réponses – MarkJ

+0

Comme documenté dans cette entrée MSDN, COM examine HKEY_Current_User \ Software \ Classes avant de regarder HKEY_Classes_Root de l'ordinateur. http://msdn.microsoft.com/en-us/library/ms693350%28VS.85%29.aspx – dthrasher

1

En général, j'accepte ce que dit Joel Coehoorn dans sa réponse.

Cependant, sachant comment le registre fonctionne à cet égard, je peux faire la suggestion que vous essayez d'enregistrer manuellement votre DLL à HKEY_CURRENT_USER\SOFTWARE\Classes, en répétant essentiellement ce que regsvr32.exe ferait à HKEY_LOCAL_MACHINE\SOFTWARE\Classes.

C'est un peu un hack, et peut-être que ça ne marchera pas, mais vous pouvez l'essayer.

+0

En ce qui concerne votre commentaire sur l'enregistrement de la DLL à la HKLU plutôt que la HKLM, j'ai essayé cela. En utilisant orca pour éditer le msi, j'ai placé la colonne de racine d'entrées de registre à 1. Quand je fais ceci cependant, le msi échoue le contrôle de validation de glace. Je suppose que je vais donner le manifeste xml un essai ... –

+0

Fortement conseiller en utilisant COM gratuit plutôt que d'essayer ceci, qui semble assez iffy IMHO – MarkJ

+0

Comme je l'ai dit - c'est un peu un hack, mais ça vaut le coup d'essayer. – Tomalak

4

Au lieu d'enregistrer vos fichiers DLL directement, vous pouvez utilisez RegFree COM.

Cela implique la création d'un fichier manifeste XML pour votre application, afin que Windows recherche vos fichiers DLL dans le dossier de l'application, au lieu d'utiliser le registre du système pour les trouver.

Cela signifie que votre application fonctionnera correctement sans que votre programme d'installation n'ait à enregistrer des DLL.

Ces liens ont plus d'info:

http://msdn.microsoft.com/en-us/magazine/cc188708.aspx

http://www.devx.com/vb/Article/32888/1954

Vous pouvez utiliser le logiciel gratuit Make My logiciel Manifest pour créer les fichiers manifestes dont vous avez besoin:

http://mmm4vb6.atom5.com/

+0

+1 Puis-je suggérer U modifier UR réponse à mentionner également Make My Manifest comme suggéré par OneNerd http://mmm4vb6.atom5.com/ – MarkJ

+0

L'article msdn sur RegFree Com dit ceci: "En fait, l'intention originale de Reg -Free COM était d'activer les applications natives existantes, telles que celles écrites en Visual Basic 6.0, C++ ou une combinaison de langages. " Je n'ai rien trouvé sur VB6 RegFree com ... des liens? –

+0

Make My Manifest fonctionne avec VB6 - voir la réponse de OneNerd – MarkJ

0
  • Sans-compte COM: MakeMyManifest est bien parlé de. C'est un outil automatique pour créer des manifestes pour les projets VB6: je ne l'ai pas essayé moi-même.
  • DirectCOM est une alternative à COM sans registre. Il a aussi des fans, encore une fois je ne l'ai pas essayé.

EDIT Le site Web MMM est en panne. Je vois here que l'auteur avait des problèmes avec leur hébergement et a fourni un autre endroit pour obtenir Make My Manifest - download it here.

Il existe une technique semi-automatique pour créer des manifestes pour COM sans registre. Vous pouvez créer les manifestes avec Visual Studio 2008 (vous pouvez utiliser une version gratuite comme Visual Basic Express Edition). Ensuite, effectuez quelques modifications à la main pour que les manifestes puissent être utilisés à partir de VB6. Voir this section de cet article MSDN pour des instructions étape par étape - ignorez le reste de l'article qui concerne ClickOnce.

0

Unattended Make My Manifest est un remake de MMM qui peut être utilisé pour générer des manifestes dans des builds automatisés. Il utilise un fichier de script pour ajouter des composants COM dépendants.

Questions connexes