J'ai une application ASP .NET qui démarre sqlcmd.exe en tant que processus. Dans deux de nos trois environnements de test, nous n'avons aucun problème. Toutefois, sur la troisième machine, même si sqlcmd.exe a été installé avec les outils de connectivité client, Process.exe ne peut pas trouver sqlcmd.exe. L'erreur affichée est:SQLCMD n'a pas été trouvé lors de l'exécution Processus à partir d'ASP .NET
Error running process: System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at L3_CNM.Utilities.Common.SqlcmdHelper.RunRemoteScript(String ServerAddress, String datbaseName, String filePath, String outputFilePath
Je ne sais pas pourquoi cela se produit. Les différences entre le cas où tout va bien par opposition à quand il échoue sont:
1) Quand cela fonctionne, il y a une installation complète du serveur SQL. En cas d'échec, nous installons uniquement sqlcmd en tant que paquet d'installation téléchargé qui pointe vers un serveur SQL qui réside ailleurs.
2) Lorsque cela fonctionne, l'application s'exécute à partir du même volume de disque que l'installation de Windows. Sur la machine qui échoue, l'application est installée sur un autre volume de l'installation de Windows. Autres points clés - la variable PATH indique l'emplacement de sqlcmd.exe, l'utilisateur qui est l'identité du pool d'applications fait partie des administrateurs système locaux, lors de l'exécution de sqlcmd.exe via l'invite de commande, les résultats sont attendus.
Toute aide serait grandement appréciée.
Merci
EDIT: Ajout de code:
try
{
Process process = new Process();
process.StartInfo.FileName = "sqlcmd.exe";
Logging.Instance.Log(Logging.Levels.Message, "Process start arguments: " + process.StartInfo.Arguments);
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.CreateNoWindow = true;
if (process.Start())
Logging.Instance.Log(Logging.Levels.Message, "Process successfully started");
else
{
Logging.Instance.Log(Logging.Levels.Message, "Unable to start process");
}
string output = process.StandardOutput.ReadToEnd();
output += process.StandardError.ReadToEnd();
process.WaitForExit();
Logging.Instance.Log(Logging.Levels.Message, "Process exited with output: " + output);
return output;
}
catch (Exception e)
{
Logging.Instance.Log(Logging.Levels.Error, "Error running process: " + e.ToString());
return e.ToString();
}
nous sommes à perte aussi sans voir votre code comment quelqu'un peut répondre avec précision cela .. cela peut être pour un certain nombre de raisons .. peut-être l'un des environnements non fonctionnels n'est pas configuré exactement comme les 2 environnements de travail .. de tirer comme dans le noir et s'attendant à frapper l'oeil de taureau à chaque fois .. s'il vous plaît fournir des informations plus significatives ou code .. pouvez-vous montrer comment vous pointez vers les autres serveurs sql ..? – MethodMan
@MethodMan, je ne m'inquiète pas à partir de maintenant si la connexion SQL réussit ou non, j'essaie seulement d'arriver à un point où SQLCMD s'exécute. J'ai essayé de fournir autant d'informations que je le pensais nécessaire, mais j'ai mis à jour la question originale avec le code qui est utilisé pour exécuter SQLCMD. – Rishi
Désolé pour l'espacement! Merci @MethodMan pour le fixer – Rishi