IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Utilisation d'un autre projet dans un service


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut Utilisation d'un autre projet dans un service
    Bonjour à tous, j'ai essayé beaucoup de choses et doit m'en remettre à votre expérience car je ne trouve pas la solution à mon problème.
    J'ai simplifié les classes pour ne s'en tenir qu'au problème.

    J'ai un service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    using test_import;
     
    namespace Hespéride
    {
        public partial class Hespéride : ServiceBase
        {
            private Timer timer = null;
     
            public Hespéride()
            {
                InitializeComponent();
            }
     
            protected override void OnStart(string[] args)
            {
                Debugger.Launch();
                timer = new Timer();
                timer.Interval = 60000; // 60 seconds  
                timer.Elapsed += new ElapsedEventHandler(OnTimer);
                timer.Start();
                OnTimer(null, null);
            }
     
            public void OnTimer(object sender, ElapsedEventArgs args)
            {
                try
                {
                    Voiture v = new Voiture(2);
                }
                catch(Exception e)
                {
                    eventLog1.WriteEntry(e.Message);
                }
            }
     
            protected override void OnStop()
            {
                timer.Stop();
            }
        }
    Et j'ai un autre projet test_import contenant la classe Voiture que j'essaie d'utiliser, et que j'ai ajouter à la solution (il était déjà existant) :

    Nom : 2017-08-31 14_29_18-Hespéride - Microsoft Visual Studio (Administrateur).png
Affichages : 479
Taille : 4,6 Ko

    J'ai bien importer les références du projet :

    Nom : 2017-08-31 14_32_01-Hespéride - Microsoft Visual Studio (Administrateur).png
Affichages : 544
Taille : 10,3 Ko

    Et pourtant lorsque je lance et débug mon service (j'ai attacher le débugger de visual studio au processus), j'ai l'erreur ci-dessous à la création de mon objet voiture :

    Le service ne peut pas être démarré. System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly 'test_import, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ou une de ses dépendances. Le fichier spécifié est introuvable.
    Nom de fichier*: 'test_import, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
    à Hespéride.Hespéride.OnTimer(Object sender, ElapsedEventArgs args)
    à Hespéride.Hespéride.OnStart(String[] args) dans C:\Users\jpougetoux\documents\visual studio 2015\Projects\Hespéride\Hespéride\Hespéride.cs:ligne 26
    à System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
    La solution doit sûrement être toute bête mais je planche dessus depuis un moment et ne la trouve pas..
    Je vous remercie donc beaucoup de votre future aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    La dll test_import est-elle présente dans le dossier où tu installe ton service ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Merci de ta réponse, je suis un peu mou de la feuille mais je vais tenter de te répondre.

    La dll ? Je n'ai pas compilé test_import sous forme de librairie, j'ai juste ajouté le projet comme ceci : clic droit sur la solution > ajouter > projet existant > clic sur test_import.csproj ;; puis clic droit sur références > ajouter une référence > projets > test_import (ce qui m'a ajouté une référence vers test_import/.../bin/debug/test_import.exe sous forme d'assembly)
    Pour le dossier ou j'installe le service, veux-tu dire le dossier qui contient le hespéride.exe et duquel je lance le installutil ? (je crois que c'est le hespéride/.../bin/debug/.. aussi).

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Lorsque tu ajoutes une référence qui n'est pas une assembly du Framework, il faut veiller à ce que la valeur de Copy Local soit à True.
    C'est dans les propriétés de la référence (Clic droit => Properties).

    test_import n'est pas une librairie ?
    c'est quoi, un exe ?

    Je ne suis pas certain que Windows accepte de démarrer un service qui a besoin de exécutable pour fonctionner.
    Dans les propriété du projet test_import et en particulier dans l'onglet "Application" quelle valeur est sélectionnée dans "Output type" ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Oui je fais toujours attention à ce que Copy Local soit à True.
    Non ce n'est pas une librairie c'est un .exe (chemin d'accès de la référence test_import : C:\Users\jpougetoux\documents\visual studio 2015\Projects\Hespéride\test_import2\bin\Debug\test_import.dll)
    Et du coup le type de sortie dans application -> application console

    J'ai essayé tout de même de faire le test, j'ai donc généré test_import en changeant l'output pour bibliothèque de classe, et en le réimportant de la manière que je décris dans mon message d'avant, cela me change le chemin d'accès de la référence test_import : C:\Users\jpougetoux\documents\visual studio 2015\Projects\Hespéride\test_import2\bin\Debug\test_import.dll
    J'essaie de lancer mon service et cela continue de me faire la même erreur !
    Peut-être vu que c'est un service dois-je placer le test_import.dll dans un dossier spécial ? Mais dans ce cas là à chaque modification du projet test_import je devrais déplacer le nouveau dll à cet endroit ?
    Merci d'avance de ton aide

    EDIT : alors j'ai réessayer en partant de 0 d'un projet service en suivant un tuto et miracle ça marche ! Je ne sais pas du tout pourquoi ni comment j'avais cette erreur avant mais il se trouve que le code n'avait pas d'erreur (j'ai fais exactement la même chose..)

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Ravi de constater que ton problème est résolu.
    Si tu en as la possibilité essaie de regarder les différences entre la solution qui fonctionne et celle qui ne fonctionne pas.
    Je pense notamment aux fichiers sln et csproj.

    Si tu arrive à trouver ce qui posait problème, ce serait pas mal de le noter ici.
    Dans le cas où quelqu'un d'autre se retrouverait dans la même situation, ça pourrait l'aider.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Et moi donc ! Merci encore de ton aide.
    Depuis que je l'ai résolu je n'arrive pas à relever l'exception comme précédemment donc je vais dire ici ce que j'ai changé, cela donnera sûrement des pistes à suivre si quelqu'un d'autre fait face au même problème :

    - J'ai lancé VS en mode administrateur
    - Au lieu de lancer le timer avec timer.Start(), je l'ai lancé avec timer.Enabled = true (pour l'arrêter timer.Enabled = false)
    - Dans les propriétés de "serviceProcessInstaller1", j'ai changé Account de "User" à "LocalSystem"

    Je ne vois pas ce que j'ai changé d'autre, c'est probablement une de ces trois choses là (même si en les rechangeant je n'ai pas réussis à recréer le problème..)
    Vraiment désolé de ne pas pouvoir isoler ce qui causait l'exception mais j'ai tellement tout bidouiller que c'est assez dur à retrouver
    (voici le tuto avec lequel j'ai refais le projet : http://www.c-sharpcorner.com/uploadf...ce-in-c-sharp/)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ressource dans un jar utiliser par un autre projet Java
    Par freelibre dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 29/09/2010, 20h16
  2. Utiliser un Dll delphi 2009 dans mon service Web
    Par Zalathorn dans le forum Services Web
    Réponses: 1
    Dernier message: 21/07/2009, 16h49
  3. Intégrer des classes d'autre projets dans son JAR
    Par romaintaz dans le forum Maven
    Réponses: 7
    Dernier message: 20/02/2008, 12h02
  4. Utiliser les class du projet dans le plugin
    Par Shiftane dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 19/01/2007, 08h36
  5. [Delphi7]Utilisation d'un fichier ini dans un service web
    Par Tcheby dans le forum Web & réseau
    Réponses: 4
    Dernier message: 25/09/2006, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo