Problèmes de .BAT en C#

Résolu
clem285 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   -  
clem285 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   -
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
 
Bonjour

pourquoi ne pas faire ta copie dans le code c#?
0
clem285 Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   83
 
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   Statut Membre Dernière intervention   83
 
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   Statut Membre Dernière intervention   83
 
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