Bonjour,

J'ai des lecteurs de bandes magnétiques IBM 3590 et 3592.

Je veux pouvoir, depuis une application, récupérer leurs statuts.

De base, vu que les lecteurs sont reliés à un serveur linux, pour récupérer leurs status je tape cette commande :
mt -f /dev/[nom du lecteur] status

Depuis windows, j'utilise l'utilitaire plink pour exécuter cette même commande.
\\[chemin jusqu'à plink]\plink.exe -ssh [user]@[ipadress du serveur linux] -pw [mdp] "mt -f /dev/[nom du lecteur] status"

Qui me retourne plusieurs choses possible :


lecteur occupé.

cartouche présente dans le lecteur

lecteur en erreur

lecteur libre


Donc pas de problème : je n'ai qu'à exécuter ma commande depuis une application en C# et récupérer le résultat pour faire une supervision centralisé des lecteurs !

Du coup je m'y mets :
Une classe pour envoyer une commande DOS et récupérer son résultat :
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
 
        public static string Execute(string file, string arguments)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe");
 
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = true;
            startInfo.RedirectStandardInput = true;
            startInfo.RedirectStandardOutput = true;
            startInfo.FileName = file;
            startInfo.Arguments = arguments;
 
            Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();
 
            var output = string.Empty;
            string lineVal = process.StandardOutput.ReadLine();
 
            while (lineVal != null)
            {
                output += "\n" + lineVal;
                lineVal = process.StandardOutput.ReadLine();
            }
 
            process.WaitForExit();
            return output;
        }
Que j'appelle ensuite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
        public const string PATH_PLINK = "\"" + @"\\***\***\**\plink.exe" + "\"";
        public const string ARGUMENTS_PLINK = "-ssh {0}@{3} -pw {1} \"mt -f /dev/{2} status\"";
        ...
        var rs = CommandeDos.Execute(Data.PATH_PLINK, string.Format(Data.ARGUMENTS_PLINK, "login", "mdp", drive.NomDrive.ToLower(), "@ipserver"));
Hop je compile (easy win )

Et là.... en fait.... tout ne marche pas comme prévu !!

la commande me renvoie le message entier lorsque le lecteur est en statut "cartouche présente dans le lecteur" ou "lecteur libre" mais ne renvoi rien si le lecteur est en statut "lecteur en erreur" ou "lecteur occupé"

Je me demande si ça n'est pas dû au fait qu'il n'y a qu'une ligne à renvoyer..

Pourtant quand je fais un "echo /dev/dr8: Input/output error" dans mon logiciel ça fonctionne...

J'ai essayé plusieurs code pour envoyer une commande dos mais c'est toujours pareil.

Dans tous les cas, pour récupérer ce status, il faut que je me connecte au serveur auquel il est rattaché et que j'utilise la commande linux
mt -f /dev/[nom du lecteur] status
Peut être existe-t'il une autre solution pour le faire?

Merci à vous.