Problèmes de .BAT en C#

Résolu/Fermé
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 - 25 juil. 2016 à 10:05
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 - 25 juil. 2016 à 15:24
Bonjour à tous !

J'ai déployé mon application sur un serveur : te-tst1
dessus, dans le dossier C:\inetpub\wwwroot\CBConfig\Bat\config\ je cré un fichier, disons, toto.txt
ce fichier, je dois le copier dans le dossier qui est sur un autre serveur : 192.168.1.7 dans le dossier \\192.168.1.7\config_files

du coup, j'ai fait le code suivant dans un.bat :
net use L: \\192.168.1.7\config_files /USER:user mdp /persistent:no
XCOPY /E C:\inetpub\wwwroot\CBConfig\Bat\config\*.* L: /Y
net use L: /delete /Y


je cré un lecteur réseau, puis je copie le contenu du dossier dans le lecteur créé, et je déconnecte le lecteur.

code dans visual studio pour appelé le fichier :

public static void ExecuteBatch(string nomFichier)
{
try
{
logger.Debug("nomFichier : " + nomFichier);

Process P = new Process();

HicefCBEntities db = new HicefCBEntities();

var theParam = (from param in db.Parametres
where param.reference == nomFichier
select param).FirstOrDefault();

logger.Debug("theParam.libelle : " + theParam.libelle);

ProcessStartInfo processInfo;
Process process;

processInfo = new ProcessStartInfo(theParam.libelle, "/c ");
processInfo.Verb = "runas";
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);

logger.Debug("processInfo : " + processInfo);
logger.Debug("process : " + process);

process.WaitForExit(3000);

process.Close();

}
catch (Exception e)
{
logger.Error(e.Message);
}
}


mon paramètre permet de récupérer le chemin du fichier bat.

contenu de mon fichier log :

2016-07-22 15:10:12.2000|DEBUG|HicefCB.Controllers.CBController|test
2016-07-22 15:10:12.2000|DEBUG|HicefCB.Controllers.CBController|test
2016-07-22 15:10:36.9900|DEBUG|HicefCB.Controllers.FichierController|config
2016-07-22 15:10:36.9900|DEBUG|HicefCB.Controllers.FichierController|config
2016-07-22 15:10:36.9900|DEBUG|HicefCB.Controllers.Batch|nomFichier : config_files.bat
2016-07-22 15:10:36.9900|DEBUG|HicefCB.Controllers.Batch|nomFichier : config_files.bat
2016-07-22 15:10:37.0056|DEBUG|HicefCB.Controllers.Batch|theParam.libelle : C:\inetpub\wwwroot\CBConfig\Bat\config_files.bat
2016-07-22 15:10:37.0056|DEBUG|HicefCB.Controllers.Batch|theParam.libelle : C:\inetpub\wwwroot\CBConfig\Bat\config_files.bat
2016-07-22 15:10:37.0056|DEBUG|HicefCB.Controllers.Batch|processInfo : System.Diagnostics.ProcessStartInfo
2016-07-22 15:10:37.0056|DEBUG|HicefCB.Controllers.Batch|processInfo : System.Diagnostics.ProcessStartInfo
2016-07-22 15:10:37.0056|DEBUG|HicefCB.Controllers.Batch|process : System.Diagnostics.Process (cmd)
2016-07-22 15:10:37.0056|DEBUG|HicefCB.Controllers.Batch|process : System.Diagnostics.Process (cmd)

le fichier log du bat est toujours vide, mais lorsque je l’exécute à la main, ça fonctionne et ça me donne ça :

C:\inetpub\wwwroot\CBConfig\Bat\config\toto.txt
1 File(s) copied
L: was deleted successfully.

Voilà, si vous avez des questions, n'hésitez pas.
A voir également:

3 réponses

Utilisateur anonyme
25 juil. 2016 à 10:14
Bonjour

pourquoi ne pas faire ta copie dans le code c#?
0
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 83
25 juil. 2016 à 10:30
Bonjour,

Je fais une copie en batch car lorsque j'essaye de créer mon fichier directement dans \\192.168.1.7\config_files, je n'ai pas les droits.
je suppose que tu fais référence à System.IO.File.Copy();
c'est vrai que je n'ai pas essayé. peut ton le faire sur le réseau ? Et en rentrant mon user et mdp ?
0
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 83
Modifié par clem285 le 25/07/2016 à 11:06
Alors, j'avance petit à petit.
lorsque mon fichier bat ne contient que :
XCOPY /E  C:\inetpub\wwwroot\CBConfig\Bat\config\*.*  C:\inetpub\wwwroot\CBConfig\Bat\dossiertest\ /Y

la mon fichier bat est bien appelé et fonctionne.
Je pense que c'est la création du lecteur réseau qui doit planter. Est-ce un problème de droit ? car mon appli fonctionne avec le user system normalement.
0
clem285 Messages postés 280 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 22 octobre 2021 83
25 juil. 2016 à 15:24
Bon, au final, j'ai fait autrement.
J'ai crée un lecteur réseau.
puis j'y cré mon fichier.
et je supprime le lecteur réseau.

        public static void connexionReseau(string nomFichier)
{
try
{

Process P = new Process();
HicefCBEntities db = new HicefCBEntities();

var theParam = (from param in db.Parametres
where param.reference == nomFichier
select param).FirstOrDefault();

ProcessStartInfo processInfo;
Process process;
processInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe", "/c " + "net use L: "+theParam.libelle+" /USER:user mdp /persistent:no");
processInfo.Verb = "runas";
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);

process.WaitForExit(3000);

process.Close();

}
catch (Exception e)
{
logger.Error(e.Message);
}
}
public static void deconnexionReseau()
{
try
{
Process P = new Process();

HicefCBEntities db = new HicefCBEntities();
ProcessStartInfo processInfo;
Process process;
processInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe", "/c " + "net use L: /delete /Y ");
processInfo.Verb = "runas";
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;

process = Process.Start(processInfo);

process.WaitForExit(3000);

process.Close();

}
catch (Exception e)
{
logger.Error(e.Message);
}
}
0