Laurent Ellerbach

Ce blog est principalement destiné à publier des informations relatives à Microsoft, à ses technologies, aux outils Visual Studio et à ses versions Express notamment Visual Basic

October, 2006

  • Laurent Ellerbach

    Steve Balmer à Polytechnique Paris

    • 1 Comments

    A l'occasion de sa dernière visite en France, mercredi dernier Steve Blamer a donné une conférence à Polytechnique. Ce n'est pas un scoop si vous suivez le blog de Benjamin :-). Benjamin y a publié quelques extraits vidéos.

    Vous pouvez dès à présent retrouver l'intégralité de la conférence avec toutes les questions posées par les Polytechniciens en uniforme et toutes les réponses apportées par Steve.

    Le trascript complet arrive bientôt.

  • Laurent Ellerbach

    AmiAmiAMiami ou gagnez nouvel an pour 20 amis à Miami

    • 0 Comments

    Tout est dans le titre ou presque :-)

    Ami d'ami à Miami

    amiamiamiamiwww.amiamiami.fr permettant de gagner son nouvel an à Miami avec 20 de ses amis Messenger ! (nous prenons en charge les 21 billets d’avion + l’hébergement en hôtel Méridien 4 étoiles !!)

     

    Pour jouez amiamiamiami c’est simple : il faut juste avoir 20 amis Messenger dans la liste d’Amis de son Space J

    Comment ajouter des amis dans son Space ? Simplissime : Regardez donc cette vidéo dans laquelle Max ajoute tous ses amis.

    Je me demandais pourquoi depuis quelques jours j'avais une tonne d'ami qui m'invitaient ! Avec un peu de chance, je vais aller passer le nouvel an à Miami.

    Pensez amiamiamiami :-)

  • Laurent Ellerbach

    J’ai hacké mon onduleur ou le reverse engineering de protocoles de communication (part 10)

    • 0 Comments

    Me voici déjà au dixième post de ma série. J'ai déjà décrypté le protocole de communication de mon onduleur. J'ai implémenté toutes les fonctions nécessaires à une gestion de cet onduleur avec des propriétés qui permettent de lire les données de courant, tension, etc. J'y ai ajouté des événements qui se déclenchent en cas de panne électrique, de batterie faible, etc. Me voilà donc avec une classe complète prête à être utiliser.

    Comme mon code est destiné à fonctionner notamment sur un serveur, il est obligatoire que ma classe soit gérée dans une application de type service Windows. Un service fonctionne quoi qu'il arrive, quelque soit l'utilisateur connecté ou non. Il lui est possible d'interagir avec le bureau Windows dans certains cas quand un utilisateur est connecté.

    Un service fonctionne sous un compte utilisateur. Cela lui donne donc les droits liés à cet utilisateur. Il existe un utilisateur un peu particulier qui est le compte System. En général, souvent pour se simplifier la vie, la plupart des services fonctionnent avec ce compte.

    Côté démarrage, il est possible d'opter pour 3 solutions :

    • Arrêté (bon, ça ne sert pas à grand-chose sauf quand le service est piloté par une autre application, ce qui peut être parfois le cas).
    • Manuel : le service ne démarre que si l'utilisateur le souhaite ou si un service nécessitant ce service démarre (cas d'une dépendance)
    • Automatique : le service se lance automatiquement avec Windows

    Voilà pour les généralités. Maintenant, écrire un service en .NET nécessite d'écrire le service en tant que tel mais aussi une classe spécifique qui va permettre d'installer le service. J'y reviendrais plus loin. Comme je l'ai indiqué dans mon premier post, j'ai décidé d'utiliser les versions Express de Visual Studio, gratuite pour tout le monde, pour faire mon développement et notamment VB Express. Les versions Express permettent de faire du développement .NET et sont déjà très complètes. Elles ont des limitations notamment dans les templates qui permettent de faciliter le développement. Les autres limitations sont liées au débugage. Dans le cas de mon service, écrire un service en VB Express m'a demandé beaucoup de temps. Certainement la partie la plus longue. Le débugage m'a été impossible. J'ai fait le test a posteriori avec une version Visual Studio Pro et si je l'avais développer avec cette version, cela m'aurais fait gagner beaucoup de temps.

    Je vais quand même expliquer comment créer un service avec les versions Express.

    Il faut, comme je l'ai indiqué, créer une classe d'installation du service. Cette classe doit s'appeler ProjectInstaller et doit hériter de System.Configuration.Install.Installer

    Voici le code nécessaire à l'installation d'un service :

    <RunInstaller(True)> Public Class ProjectInstaller

    Inherits System.Configuration.Install.Installer

    Public Sub New()

    MyBase.New()

    Dim myServiceProcessInstaller As System.ServiceProcess.ServiceProcessInstaller

    Dim ServiceOnduleurInstaller As System.ServiceProcess.ServiceInstaller

    myServiceProcessInstaller = New System.ServiceProcess.ServiceProcessInstaller

    ServiceOnduleurInstaller = New System.ServiceProcess.ServiceInstaller

    'ServiceProcessInstaller

    myServiceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem

    myServiceProcessInstaller.Password = Nothing

    myServiceProcessInstaller.Username = Nothing

    'ServiceOnduleurInstaller

    ServiceOnduleurInstaller.DisplayName = "Service Onduleur"

    ServiceOnduleurInstaller.ServiceName = "Service Onduleur"

    ServiceOnduleurInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic

    'ProjectInstaller

    Installers.AddRange(New System.Configuration.Install.Installer() { myServiceProcessInstaller, ServiceOnduleurInstaller})

    End Sub

    End Class

    Comme expliqué dans les généralités des services, il est nécessaire de déterminer sous quel compte et quel va être le type de démarrage du service. C'est là aussi que le nom du service est écrit en dur. C'est le nom qui apparaît dans la console d'administration des services.

    Pour revenir sur le cas du compte System, ce compte est comme toutes les autres, il possède un login et un mot de passe. Cependant, dans le cas de l'initialisation du compte pour une utilisation avec le compte System, il faut spécifier ServiceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem et ne pas oublier les deux lignes ServiceProcessInstaller.Password = Nothing et ServiceProcessInstaller.Username = Nothing. Si une de ces variables est modifiée, il y a des chances que le lancement du service ne fonctionne pas car les informations de compte stockées pourraient être étonnées.

    Une fois la classe ProjectInstaller d'écrite, il reste le service en tant que tel à écrire. Voici une classe de base qui associée à la classe précédente fonctionne.

    Public Class ServiceOnduleur

    Inherits System.ServiceProcess.ServiceBase

    Public Sub New()

    MyBase.New()

    Me.ServiceName = "Service Onduleur"

    End Sub

    ' C'est par ici que le service sera initialisé

    <MTAThread()> Shared Sub Main()

    Dim ServicesToRun() As System.ServiceProcess.ServiceBase

    ' Démarrage du service dans le process

    ServicesToRun = New System.ServiceProcess.ServiceBase() {New ServiceOnduleur}

    System.ServiceProcess.ServiceBase.Run(ServicesToRun)

    End Sub

    Protected Overrides Sub OnStart(ByVal args() As String)

    ' Initialisation du service pour le démarrage

    End Sub

    Protected Overrides Sub OnStop()

    ' Code qui arrête le service

    End Sub

    End Class

    La classe service doit être publique et héritée de la classe System.ServiceProcess.ServiceBase. Elle doit avoir un point d'entrée (ici Shared Main) qui initialise le service. L'initialisation se fait en créant une nouvelle classe ServiceBase et en le démarrant. Il est possible de démarrer plusieurs services dans le même process. Pour cela, il suffit de faire comme suit :

    ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}

    Le minimum pour une classe de type service est d'implémenter une méthode OnStart et une autre OnStop. Comme leurs noms l'indiquent, dans le OnStart, il faut initialiser le service pour qu'il démarre et dans le OnStop ce qu'il faut pour qu'il s'arrête.

    Avec cette classe service, la gestion de l'onduleur, l'envoie d'email, j'ai maintenant tout ce qu'il faut pour écrire un service complet qui me permette de gérer mes onduleurs. Stay tune, il y aura peut-être une suite :-)

  • Laurent Ellerbach

    10 bonnes raisons de mettre un flux RSS sur son blog

    • 0 Comments

    Je relaie un super post de Christophe Lauer sur les 10 bonnes raisons de mettre un flux RSS sur son blog !

  • Laurent Ellerbach

    Je joue aux Lego NXT Mindstorms : la preuve en vidéo !!!

    • 0 Comments

    Benjamin Gauthey a capturé un moment où je joue aux Lego NXT Mindstorms. La preuve en image :

    Vidéo Lego NXT Mindstorms

    C'est un superbe jouet, idéal pour apprendre à programmer en s'amusant. Il possède entre autre une interface Bluetooth et Lego publie toutes les spécifications nécessaires pour s'y interfacer. Ca laisse la porte ouverte à un pilotage à distance via Bluetooth en .NET et compact framework .NET. Stay tune :-)

  • Laurent Ellerbach

    Prochain Forum Architecte SOA le 19 octobre : la vidéo de teasing !

    • 0 Comments

    Le prochain forum architecte sur SOA autour du thème "De la production à la consommation de services Infrastructure SOA dans des scénarios Web, SaaS et BPM" (rien que ça :-)). Cette journée permettra de faire un point sur les enjeux d'implémentation d'une architecture SOA selon les perspectives actuelles (Web et BPM) et à venir (Software As A Service). L'introduction sera présentée David Chappell, directeur de Chappel & Associates. Je suis fan de David qqui arrive à vulgariser les problématiques d'architectures. Pas facile.

    Cliquez ici pour vous inscrire et découvrir le programme.

    Enfin, je ne saurais résister à vous présenter la vidéo de teasing réalisée par Marine Tranquard avec Stève Sfartz et Jean-Christophe Cimetière comme acteurs. J'adore !

    Vidéo !

Page 1 of 1 (6 items)