otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008
-
13 juil. 2007 à 11:53
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
20 sept. 2007 à 19:29
Bonjour à tous
j'ai crée une bibliothèque de fonctions. Je voulais appeller les fonctions à partir d'Excel (2003). Alors j'ai crée un automation add-in sur Visual Studio. Quand je rentre sur Excel, je vais sur macro complémentaires, j'ajoute la dll (add-in), et tout marche bien sur mon ordinateur. Par contre si je mets la dll sur un autre ordinateur, Excel ne reconnait pas le add-in.
En fait, j'avais déjà installé le runtime VSTO. Quand je démande à Excel d'ajouter la macro complémentaire, il me sort un message d'erreur: "le fichier que vous avez sélectionné ne contient pas de nouveau serveur Automation, ou vous ne disposez pas de privilèges suffisants pour enregistrer le serveur Automation" ou "The File you selected does not contain a new Automation Server, or you do not have sufficient privileges to register the Automation Server" .
Sur ma machine ça marche normalement... sauf si j'ai un message d'Excel en disant qu'il n'arrive pas à trouver le mscoree.dll. Si je clique sur oui, il perd la réference de la macro complémentaire, puis si j'essaye de trouver et rajouter ma dll, Excel me sort le même message d'erreur. Quelqu'un a une idée, SVP?
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 31 juil. 2007 à 19:40
salut,
oui, je vois le prb (la class s'appelle TBInstall mais la partial Installer2) mais ca sera plus simple de le faire autrement :
-> tu ajoutes un nouvel item de type Installer
-> tu ne t'occupes pas de .Designer.cs
-> dans le InstallerTruc.cs à l'intérieur de la classe tu copies simplement :
//enregistre l'assembly
public override void Install(System.Collections.
IDictionary stateSaver)
{
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 25 juil. 2007 à 20:36
salut,
personnelement, je viens de tester et ca marche :
-> j'ai office 2007 d'installé et visual studio
-> j'ai copier ce code dans fichier Functions.cs :
using System;
using System.Runtime.InteropServices;
namespace NAddIn
{
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Functions
{
public Functions()
{
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type t)
{
Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey(
"CLSID\\{" + t.GUID.ToString().ToUpper() +
"}\\Programmable");
}
}
}
-> j'ai définit "Make COM visible" mais pas "Register for COM"
-> compilation puis j'ai mis la dll sur le bureau
-> regasm /codebase
-> dans office 2007 (quand j'ai fini par trouver le gestionnaire de complément), j'ai trouvé mon addin "NAddIn.Functions"
-> je l'ai sélectionné, le message "mscoree.dll" est apparu, j'ai répondu "non"
-> ensuite en saisissant =AjouterAzerty(3;4) dans une cellule ca marche...
en tout cas, si je fais parcourir puis que je sélectionne la dll, j'ai le message automation truc...
en fait, je pense que sur une autre machine, les comregisterfunction ne sont pas appellées :
-> est-ce que tu utilises regasm ?
-> si c'est un projet de déploiement, alors il me semble qu'il y a un bug dans l'appel des fonction comregister...
ShareVB
Vous n’avez pas trouvé la réponse que vous recherchez ?
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 26 juil. 2007 à 13:57
merci bcp ShareVB. ça fait un mois que je galère avec ça. J'ai posé plusieurs questions par tout et t'es la première personne qui me donne un réponse précise. j'ai résussi çà faire marcher le code sur ma machine. Le gros pb maintenant est de faire l'installation sur une autre machine. Je sais déjà qu'il faut installer le .Net2.0. Là, il y a un petit souci, car le add-in utilise le .NET 2.0 et Excel utilise .NET 1.1. Pour résoudre ce problème, il faut installer le patch office2003-KB907417-FullFile-ENU . Pour que les outils VSTO marchent, il faut aussi installer le runtime vstor .
Si j'essaye d'utiliser regasm, ça ne marche pas. Il ne reconnait pas la dll pour la registrer. Mais je ne sais pas comment résoudre ça. T'as une idée?
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 26 juil. 2007 à 22:43
salut,
qu'entends tu par "Regasm ne reconnait pas la dll pour la registrer" ? normalement tu fais un projet de déploiement, et tu indiques de l'enregistrer avec regasm dans une custom action...
sinon, tu peux mettre une custom action dans ta dll :
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Configuration.Install;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
namespace prjIEAddonSample
{
/// <summary>
/// Cette classe est nécessaire d'enregistrer l'assembly en appelant les ComRegisterFunction
/// </summary>
[RunInstaller(true)]
public class TBInstaller : System.Configuration.Install.Installer
{
//enregistre l'assembly
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
RegistrationServices reg = new RegistrationServices();
reg.RegisterAssembly(this.GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase);
}
//désenregistre l'assembly
public override void Uninstall(System.Collections.IDictionary savedState)
{
RegistrationServices reg = new RegistrationServices();
reg.UnregisterAssembly(this.GetType().Assembly);
base.Uninstall(savedState);
}
}
}
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 27 juil. 2007 à 21:01
salut,
ton code me semble OK, seulement, je pense que ton projet de déploiement n'appelle pas les comregisterfunction ce qui fait que tu ne vois pas l'addin...normaleme, regasm.exe fait tout bien mais je ne sais pas si tu peux l'utiliser sans le SDK de développement...j'ai eu des prb avec les projets de déploiement qui ne semble pas appeler à tous les coups les comregisterfunction...
donc si tu emploies un projet de déploiement (ce que je te conseilles), tu ajoutes une classe Installer dans ta dll, tu copies le code de mon précédent post à la place du code généré dans la classe installer, dans ton projet tu ajoutes une custom action pour Install et Uninstall en laissant InstallerClass = True...
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 30 juil. 2007 à 14:40
Salut,
Merci pour ta réponse ShareVB! Je pense que t'as raison. Mon déploiement n'appelle pas les comregisterfunction. J'ai crée un setup Project, puis j'ai insérer une classe nomée Installer. Ensuite j'ai copié ton code. Par contre, je n'ai pas trouvé le InstallerClass = True. C'est quoi ça? Une autre question: Dans le custom action, je demande d'ajouter une action personalisée sur installer. Il m'ouvre les options suivantes: 1. Bureau de l'utilisateur; 2. dossier d'application; 3. Menu Programmes de l'utilisateur. A partir de là je ne sais pas quoi faire.
Merci bcp pour ton aide,
Otavio Reis
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 30 juil. 2007 à 22:54
salut,
1) Installer = true c'est une fois que tu as crées ta custom action sur Install et Uninstall, c'est dans les propriétés de la custom action sélectionnée
2) "1. Bureau de l'utilisateur; 2. dossier d'application; 3. Menu Programmes de l'utilisateur", c'est un peu comme un OpenFileDialog...tu vas dans "dossier d'application" et tu cliques sur "sortie primaire..."/"Primary output from ton_projet"...et là ca t'ajoutes une custom action sur laquelle tu vérifies le Installer = true dans les prop...
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 30 juil. 2007 à 22:57
salut,
si c'est OK je mettrais un code et un tuto pour expliquer tout ca...en fait, le lien que je mentionnais dans mon premier post donne la méthode juste, mais ca peut être mal interprété et il n'y a effectivement rien sur le déploiement car tout le monde crois que le déploiement c'est tjs facile...
if (disposing && (components ! =
null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Code g‚n‚r‚ par le Concepteur de composants
///<summary>
/// M‚thode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette m‚thode avec l'‚diteur de code.
///</summary>
private
void InitializeComponent()
{
components =
new System.ComponentModel.
Container();
}
#endregion
}
}
Quand je génère, j'obtient l'erreur suivant: Erreur 1 'AltiaD.Installer2.Dispose(bool)' : aucune méthode appropriée n'a été trouvée pour la substitution C:\OTAVIO\AltiaD\AltiaD\Installer2.Designer.cs 14 33 AltiaD.
J'ai marqué l'erreur sur le code: c'est le mot "Dispose" en rouge.
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 1 août 2007 à 12:40
Merci bcp ShareVB!
J'ai tout fait, puis j'ai généré la solution et j'ai crée le setup. Jusqu'à là tout ok.
Je l'ai installé sur un autre ordinateur qui avait déjà le .NET 2.0, le interop, le runtime vstor. J'ouvre Excel, mais je ne vois pas l'automation add-in dans la liste. Je ne comprend pas pourquoi ça ne marche toujours pas. T'as une idée, stp?
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 1 août 2007 à 16:26
Excuse moi!! C'est moi qui avais fait une betise.... ça a marché!!!! Merci bcp ShareVB! ça fait plusieurs semaines que je cherchais une solution par tout!