2009-04-01 6 views
0

J'ai une application qui est écrite dans Excel VBA, myApp.xls. Actuellement, nous utilisons InstallShield pour distribuer l'application. Puisque nous passons à Windows Vista, je dois pouvoir installer l'application en tant qu'utilisateur standard. Cela ne me permet pas de mettre à jour le registre pendant le processus d'installation. En plus de l'application Excel, nous avons également plusieurs applications VB6. Afin d'installer ces applications, j'ai été en mesure d'utiliser RegFree com et Make My Manifest (MMM) comme suggéré par les gens sur ce forum (j'apprécie grandement l'aperçu btw!). Ce processus, bien qu'un peu fastidieux, a bien fonctionné. J'ai ensuite emballé la sortie de MMM dans un projet d'installation VS '05 et supprimé l'invite UAC sur le msi en utilisant msiinfo.exe. Maintenant, je suis confronté à l'installation d'une application qui vit essentiellement dans un fichier Excel. J'ai modifié un manifeste que MMM a créé pour moi pour l'une de mes applications VB6 et j'ai essayé d'exécuter le fichier Excel, mais je n'ai pas eu beaucoup de chance. Est-ce que quelqu'un sait d'une manière de faire ceci? Est-ce que RegFree com fonctionne avec VBA? Toutes les pensées ou suggestions seraient très appréciées.Puis-je utiliser RegFree Com avec une application écrite en Excel VBA?

Merci,

Steve

Répondre

1

Oui, il est possible d'utiliser COM sans enregistrement par VBA, sur Win2k3 +. Fondamentalement, reg-free dit que «cette classe COM n'a plus besoin d'être enregistrée pour être détectable, mais les informations d'enregistrement seront portées par un manifeste». Les manifestes eux-mêmes sont implicitement référencés par des exécutables lorsqu'ils sont incorporés dans l'exécutable, ou nommés * .exe.manifest. Cependant, dans le cas de VBA - votre code ne réside pas dans un exécutable que vous contrôlez, vous avez donc besoin d'une autre façon d'obtenir une référence au manifeste.

C'est là que l'objet Microsoft.Windows.ActCtx entre en jeu - il vous permet spécifiquement d'instancier votre objet avec une référence manifeste explicite.

Par exemple (en JS, depuis que je suis rouillé sur la syntaxe VBA):

var actCtx = WScript.CreateObject("Microsoft.Windows.ActCtx"); 
actCtx.Manifest = "myregfree.manifest"; 
var obj = actCtx.CreateObject("MyObj"); 
Questions connexes