Problèmes de .BAT en C#
Résolu
clem285
Messages postés
290
Statut
Membre
-
clem285 Messages postés 290 Statut Membre -
clem285 Messages postés 290 Statut Membre -
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 :
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 :
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.
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.
3 réponses
-
-
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 ? -
Je n'ai pas testé, mais j'ai trouvé ça
https://social.msdn.microsoft.com/Forums/fr-FR/e1786c18-e089-458d-8239-df97e659fbb2/copie-de-fichiers-sur-rseaux-avec-authentification?forum=visualcsharpfr
-
-
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. -
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);
}
}