Extinction d'un pc en fonction du réseau

Description

Extinction d'un PC en fonction du réseau en C# / Shut down a computer according to the network with C#

J'ai un ordinateur sur mon réseau qui sert uniquement de backup (pas d'écran, pas de clavier, pas de souris). Cet ordinateur s'enclenche (électroniquement) lorsqu'il y a au moins un ordinateur présent sur le réseau. Pour économiser de l'énergie, j'ai crée un petit service windows qui scrute l'activité de mon réseau et qui éteint cet ordinateur de backup après un certain laps de temps d'inactivité.
J'ai rajouté un fichier de config (où on peut setter le temps avant extinction et quelques autres bricoles) et un petit fichier de log assez sommaire (comme c'est un petit programme perso, ces fichiers sont stockés dans le répertoire d'install, Program Files par défaut).

Je me suis inspiré de deux codes trouvés sur codeproject. Il s'agit de http://www.codeproject.com/csharp/timercomputershutdown.asp pour ce qui concerne l'extinction de l'ordinateur et de http://www.codeproject.com/cs/internet/ListNetworkComputers.asp pour scruter le réseau.
Remarqez que ce code utilise très fortement les APIs.

Dans la solution il y a également un projet de déploiement, il suffit de le compiler et le .msi correspondant est prêt à être déployé.
Sur ces bonnes paroles, je vous souhaite une bonne année 2007, moi je vais gentillement aller décuver...

Source / Exemple :


/// ------------------------------------------------------------------------------------
/// <summary>
/// Check on the network if there is at least one computer.
/// </summary>
/// ------------------------------------------------------------------------------------
private void CheckForShutDown()
{
     // Get the durations to wait from the config file
     int waitDuration = Properties.Settings.Default.WaitDuration;
     int checkDuration = Properties.Settings.Default.CheckDuration;

     while (true)
     {
          if (!this._networkBrowser.IsOtherComputerConnected)
          {
               // Log inactiviy
               this._sWriter.WriteLine(string.Format("{0}: Nobody on the network", DateTime.Now.ToShortTimeString()));
               this._sWriter.Flush();
               // Nobody on the network !
               this.Wait(waitDuration);
               // Recheck after a while...
               // If there is always nobody, exit the loop
               if (!this._networkBrowser.IsOtherComputerConnected) break;
          }
          // Someone is on the network, retry in a few seconds...
          this.Wait(checkDuration);
     }
     // Shutdown the computer
     WindowsController.ExitWindows(RestartOptions.PowerOff, true);
}

Conclusion :


Tout feed-back est naturellement le bienvenu

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.