Fermetre prg a distance

Signaler
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008
-
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008
-
Bonjour,
Dans une application industriel,j'ai un serveur qui tourne sous windows 2000 et 12 postes clients également sous 2000 en réseau ethernet.Lors d'un plantage du serveur il faut fermer l'appli  qui tourne sur les clients(Monitor Pro) et rebooter le serveur puis redémarrer Monitor pro sur chaque clients .Les clients sont assez éparpillés dans l'usine l'opération n'est pas fréquente mais prend trop de temps.
Ma question,est il réalisable de:
- fermer monitor pro qui tourne sur chaque clients( prg identique sur chaque clients) depuis le serveur avec pourquoi pas un compte rendu de fermeture.
- puis ouvrir depuis le serveur un fichier également sur chaque clients(fichier style notepad avertissant les opérateurs de ne pas relancer monitor pro) et pendant qu'on y est réouvrir monitor pro fermer au départ
.Mes connaissances en programmation sont quasi nul donc,je fais appel aux pro pour m'orienter (sous quel logiciel programmer,est ce réalisable par le débutant que je suis,etc....)

Merci de votre aide

17 réponses

Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
1
Bien sur c'est realisable, regarde un peu les tuto sur winsock qui te permettra de communiquer avec les diferent pc sous forme de reseau client-serveur.

Mais ce que tu demande existe deja en partie :
http://www.vbfrance.com/codes/ETEINDRE-SON-PC-DISTANCE-VIA-RESEAU_28982.aspx

<hr />www.e-fitz.com
Encore plus de source et de tutoriels.
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Salut,

Sufit de faire un prog qui essaie d'accéder à ton serveur en boucle. Lorsque le serveur n'est plus disponible, tu affiche un avertissement et tu ferme monitor pro. Dès que le serveur est à nouveau disponible, tu réouvre monitor pro.

Très facile à faire (quelques lignes en .NET)
Si tu me donne quelques détails, je veux bien te le faire (en .NET 2.0 ou 3.5)

Il me faut simplement une commande qui permette de vérifier si le serveur répond ou non...
Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
1
J'en profite pour corriger, la source que j'ai donné ne repond pas entiermeent a la question car c'est pour eteindre le pc (je devais avoir le cerveau embrumé pour confondre le pc et un programme) mais le fonctionnnement du client serveur reste le meme.

<hr />www.e-fitz.com
Encore plus de source et de tutoriels.
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

Salut kevin
merci de ton aide,dis moi de quels détails as tu besoin'ou trouver la commande qui permette de vérifier si le serveur répond ou non...
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Ca je ne sais pas... a quoi sert-il ce serveur?
Il faut essayer d'accéder à une ressource du serveur, si elle n'est pas dispo = serveur arreté
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

Le serveur contient une base de données SQL que l'on consulte depuis les clients et il y a également Monitor pro dessus.Une question,si ton prog essaie d'accéder au serveur en boucle sur tous les clients n'y a t-il pas de risque de saturation de la com?
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"Une question,si ton prog essaie d'accéder au serveur en boucle sur tous
les clients n'y a t-il pas de risque de saturation de la com?"

Lorsque je dis en boucle, je veux dire à intervals réguliers. Par exemple toutes les minutes.
"Le serveur contient une base de données SQL que l'on consulte depuis
les clients et il y a également Monitor pro dessus."
Monitor Pro je ne sais même pas à quoi ça sert. Pour ce qui est de la requete SQL, je pense qu'on peut faire le test en 1 ligne. C'est un serveur sécurisé? Si oui, ca pose des problèmes de sécu si l'on doit stocker le mot de passe.
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

Monitor Pro est une supervision qui discute avec des automates elle nous renseigne sur par exemple des niveaux de cuves ,des nombres de pieces ,des alarmes etc...
Pour le serveur qu'entend tu par sécurisé,il a un anti virus mais tous les clients ont accés au serveur ainsi que les automates.
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"Pour le serveur qu'entend tu par sécurisé,il a un anti virus mais tous les clients ont accés au serveur ainsi que les automates."

Ma question était : faut-il un mot de passe pour accéder au serveur SQL?
Mais si c'est un système interne, ce n'est sans doute pas grave si le mot de passe est stocké qq part. D'ailleur il le serait aussi par vos programmes qui utlise déjà ce serveur.

Bref, ce soir je te donne du code. As-tu une version de Visual Basic .NET installé? Ou préfère-tu une version finalisé sans savoir ce qu'il s'y passe? Perso je préfère te montrer du code et que tu fasse ton projet tout seul, car c'est n'est pas la politique de ce site de fournir un programme complet. Vu la simplicité du code, je pense que tu n'aura aucune difficulté à comprendre le programme si tu sais en quoi consite la programmation Et la compilation final se fait en 1 clique.

Il faut juste que je me renseigne sur la façon d'envoyer une requette à une BDD SQL, c'est une des rare chose que je n'ai jamais fais Mais c'est sans doute fait en 2 3 lignes.

Lorsque le serveur crash, faut-il que les clients le sachent tout de suite?
Car avec mon interval d'une minute, il se peut que le message "le serveur n'est plus disponible" s'affiche jusqu'à une minute après l'arêt du serveur (logique). Mais sur un réseau Ethernet et si votre serveur n'est pas surchargé, même une requète toutes les secondes ne posera pas de problème je pense.
Dans tous les cas, il y aura un fichier de configuration avec ce programme, ou l'ont pourra choisir l'adresse du serveur, le temps entre chaque test, et le chemin du/des programmes à fermer/relancer.
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

Il n'y a pas de mots de passe pour sql.
Je peu avoir la version 6 de VB il me semble(donne moi la tienne) et je suis tous a fais d'accord avec toi je veux comprendre le code sinon pas d'interêt pour moi.
Pour la surchage du serveur je ne serais pas te dire,j'ai environ deux,trois défaut de com par jour(il tourne 24/24).
Pour les clients l'info de plantage n'est pas utile dans la seconde,mais avec un fichier de config c'est du velour.
Je te rappel que tous fonctionne sous 2000(peut ettre pas de soucis pour toi)

Merci de ton aide
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Tu as bien fais de rappeler la version de Windows. La dernière version du framework n'est pas compatible avec 2000, mais la version 2.0 (la précédente) l'est à condition d'avoir installé le Service Pack 3 de Windows 2000 sur chaque machine.

Je ne code plus qu'en VB.NET, VB6 c'est trop vieux pour moi, je ne saurais faire un tel prgramme rapidement sans devoir me redocumenter.

Si c'est OK pour toi que ce soit fait en .NET 2.0, il te faudra donc vérifier la présence du Service Pack 3 au minimum sur tes machines clientes, le cas échéant il faudra l'installer (Service Pack 4 va aussi). Même chose pour le framework 2.0 pour que mon programme puisse fonctionner (il est possible qu'il soit intégré au Service Pack 3 ou 4 de Windows 2000)
Ensuite tu peux télécharger une des version express de Visual Basic. Je viens de vérifier, il semble impossible de créer un programme tournant sur le framework 2.0 avec la derniere version de Visual Basic express basé sur le framework 3.5 (Contrairement à Visual Studio où il est possible de choisir la version du framework)
Mais il suffit de télécharger la version 2005 de Visual Basic express ici
C'est donc maintenant qu'il faut te décider si tu veux bien faire ça en VB.NET Tout ce qui est .NET requièrt le framework. Et Visual Basic est un choix parmis d'autre, tout comme le C# ou le C++.
Je précise que si tu choisis une autre solution, il te faudra l'aide de quelqu'un d'autre.
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

J'ai verrifié, j'ai le service pack 3,mais par contre pas de framework du tout donc je installerai le 2.0 mais a quoi sert il? Peut il me causer des soucis via mon fonctionnement actuel?
Et pour la prog en .NET 2.0 aucun pb je telechargerai VB express 2005
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

faut il le framework sur le serveur également?
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"mais a quoi sert il?"

Le framework .NET inclut le runtime pour toutes les application .NET. Il s'agit d'un système comparable à la machine virtuelle Java. En plus le framework fournis de nombreuses classes aidant le programmeur à accéder aux ressources de Windows. Tu trouvera aisément plus d'info sur le web.
"Peut il me causer des soucis via mon fonctionnement actuel?"
En théorie non. Mais comme on le sais, on ne peut jamais être sur de rien Mais bon, c'est un produit Microsoft, automatiquement inclut dans Windows Vista et Windows XP SP2, et disponible sur Windows Update pour n'importe quel système compatible.
Ce qui aurait plus de chance de poser problème, c'est l'installation du SP3 de Windows 2000, mais comme il est déjà installé la question ne se pose pas.
"faut il le framework sur le serveur également?"
Non. Le framework .NET est utilisé pour faire tourner les applications .NET. Dans le cas présent, seul les clients auront un tel programme à exécuter.
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Bon, voici du concret.

Tout d'abord, l'interface graphique. J'ai créé un simple formulaire avec une TextBox et un Button comme ceci:
Pour le formulaire: (Name) frmMain, FormBorderStyle FixedSingle, Text = Informations serveur, StartPosition = CenterScreen, AcceptButton = btnOK, ControlBox = False, ShowInTaskbar = False, TopMost = True, Visible = FalsePour la TextBox: (Name) txtMessage, MultiLine True, ReadOnly = True, Anchor = "Top, Left, Bottom , Right"Pour le Button: (Name) btnOK, Anchor "Bottom, Right"

Et voici le code:

Les déclarations :
Private Interval As Integer         ' Interval entre les tests
Private SqlAddress As String        ' Adresse du serveur SQL
Private IsServerOnline As Boolean = True  ' Indique si le serveur est actuement disponible
Private ProcessToClose As String    ' Processus à fermer lorsque le serveur n'est plus dipsonible
Private ApplicationToOpen As String ' Le programme à ouvrir une fois que le serveur est à nouveau disponible
Private OfflineMessage As String    ' Message affiché lorsque le serveur n'est plus disponible
Private OnlineMessage As String     ' Message affiché lorsque le serveur est à nouveau disponible
Private WithEvents Timer As New Timer
On admet que le serveur est en ligne au chargement de l'application : IsServerOnline = True

Chargement :
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Try
        ' Charger les options (fichier de configuration)
        LoadSettings()
        Me.Opacity = 0  ' rendre la fenetre invisible
        ' Lancer le timer qui testera la connection à intervals réguliers
        Timer.Interval = Interval
        Timer.Start()
    Catch ex As Exception
        ' Erreur lors du chargement
        MsgBox("Le programme n'a pas pu se lancer" & vbCrLf & vbCrLf & ex.Message)
        Me.Close()
    End Try
End Sub
On fait le chargement dans un Try / Catch. Si une erreur survient, nottament si le fichiers de configuration est inexistant ou de format incorrect, un message est affiché et le programme se ferme.On rend le formulaire invisible, il sera affiché lorsque il faudra afficher un message. On ne peut faire un Visible False, le formulaire s'affiche quand même, mais avec un Opacity 0 tout va bien.

Le chargement des paramètres :
Private Sub LoadSettings()
    ' Charger les options (fichier de configuration)
    Dim Doc As New Xml.XmlDocument
    Doc.Load(IO.Path.Combine(Application.StartupPath, "Settings.xml"))

    Interval = Doc.DocumentElement.GetAttribute("Interval")
    SqlAddress = Doc.DocumentElement.GetAttribute("SqlAddress")
    ProcessToClose = Doc.DocumentElement.GetAttribute("ProcessToClose")
    ApplicationToOpen = Doc.DocumentElement.GetAttribute("ApplicationToOpen")
    OnlineMessage = Doc.DocumentElement.GetAttribute("OnlineMessage")
    OfflineMessage = Doc.DocumentElement.GetAttribute("OfflineMessage")
End Sub
On utilise un fichier XML, car très simple à lire avec .NET. Le fichier s'appel Settings.xml et se trouve dans le dossier de l'application. Voici ce qu'il contient:
<?xml version="1.0" encoding="utf-8"?>
<Settings
    Interval = "10000"
    SqlAddress = "xxxx"
    ProcessToClose = "notepad"
    ApplicationToOpen = "NotePad.exe"
    OnlineMessage = "Le serveur est à nouveau disponible"
    OfflineMessage = "Le serveur n'est plus disponible"
    />
Si l'un des attribut manque, sa lecture retournera un chaine de caractère vide. Aucune gestion d'erreur à ce niveau n'est présente pour l'instant, mais il serait bien de vérifier que tous ces paramètre sont valide au chargement.

La suite viendra plus tard
Si tu as déjà des questions pour ce code, n'hésite pas
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Et voilà la suite.

Le test à intervals réguliers pour savoir si le serveur SQL est disponible:
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer.Tick
    Dim IsOnline As Boolean = TestSqlServer()
    If IsServerOnline And Not IsOnline Then
    ' Le serveur n'est plus diponible
    ' => afficher le message
    Me.txtMessage.Text = OfflineMessage
    Me.Opacity = 1
    ' => fermer le programme cible
    Dim processes() As Process = Process.GetProcessesByName(ProcessToClose)
    If processes.Length > 0 Then
        processes(0).CloseMainWindow()
        ' processes(0).Kill
    End If
    ElseIf Not IsServerOnline And IsOnline Then
    ' Le serveur est à nouveau disponible
    ' => afficher le message
    Me.txtMessage.Text = OnlineMessage
    Me.Opacity = 1
    ' => réouvrire le programme cible
    Dim processes() As Process = Process.GetProcessesByName(ProcessToClose)
    If processes.Length = 0 Then
        Process.Start(ApplicationToOpen)
    End If
    End If
    IsServerOnline = IsOnline
End Sub'TestSqlServer' est une fonction retournant un booléen, True Serveur disponible, False Non disponible.
Si le serveur était disponbiel mais ne l'est plus, on affiche le message 'OfflineMessage' (en mettant l'opacité de la fenêtre à 100%) puis on identifie le processus qu'il faut fermer.
On le recherche grâce au nom. Il est possible que le processus soit ouvert plusieurs fois, dans ce cas il faudrait peut-être faire une boucle pour fermer chaque processus de la liste 'processes' au lieu de prendre que le 1er (mon code sous-entend qu'il y à un seul processus de ce nom ouvert).
Ensuite on peut faire soit un appel à 'CloseMainWindow' qui fermera le processus normalement ("voulez-vous enregistrer votre documents?"), ou alors un Kill qui force le processus à se fermer sans conditions.
Pour le cas ou le serveur redevient disponible, c'est plus ou moins la même chose à part qu'on appel la fonction 'Process.Start', en lui donnant comme argument le chemin complet de l'application à ouvrir. Avant celà, on test si le processus est déjà ouvert pour éviter d'ouvrir le programme une 2ème fois.

Tester si le serveur est disponible:
Private Function TestSqlServer() As Boolean
    Try
        Dim sql As New SqlClient.SqlConnection(SqlAddress)
        sql.Open()
        ' Le serveur est disponible
        Return True
    Catch ex As Exception
        ' Le serveur n'est pas disponible
        Return False
    End Try
End Function
On fait simplement une tentative de connection à l'intérieur d'un Try / Catch. Si la connection échoue, cela veut dire que le serveur n'est pas disonible.
Je ne travail jamais avec des bases de données, je ne connais donc pas la syntaxe exacte de 'SqlAddress', mais c'est une chaine ressemblant à ça:
"Data Source=(local);Database=AdventureWorks;Integrated Security=SSPI;"
Plus d'infos ici.

Bouton OK:
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
    Me.Opacity = 0
End Sub
Simplement pour cacher la fenêtre lorsque on presse sur le bouton OK

Et voilà, c'est tout. J'ai testé le code en mettant ceci dans la procédure 'TestSqlServer':
If MsgBox("En ligne?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    Return True
Else
    Return False
End If
J'ai donc testé avec NotePad, comme on peut le voir en regardant le contenu du fichier XML. Aucun problème à signaler.
Ici pour télécharger le projet complet (ne sera pas indéfiniment disponible)
Messages postés
8
Date d'inscription
samedi 5 juillet 2008
Statut
Membre
Dernière intervention
13 juillet 2008

Merci beauscoup de ton aide,je vais faire des essais.