-1

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(); 
} 
+0

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

+0

@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

+1

Désolé pour l'espacement! Merci @MethodMan pour le fixer – Rishi

Répondre

0

Un redémarrage simple. Dieu je déteste Windows parfois.

Merci @Methodman pour la suggestion.

0

Je suppose que c'est au sujet de la variable d'environnement PATH.

Couple de tests! Un, ouvrez une fenêtre de commande et tapez

WHERE SQLCMD 

Ceci imprimera partout où SQLCMD peut être vu. Si vous n'obtenez rien, vous devrez mettre à jour votre chemin. Si vous obtenez quelque chose, il peut s'agir d'une variable d'environnement utilisateur, pas de la variable d'environnement système, qui est utilisée par ASP.NET.

Pouvez-vous vérifier que la version SYSTEM de cette variable contient le bon dossier? Sur win8 et ci-dessus, ouvrez le menu Démarrer et tapez "Modifier les variables d'environnement du système". Puis cliquez sur "variables d'environnement" et assurez-vous, sous Variables système, que PATH contient le dossier renvoyé par WHERE SQLCMD Sinon, placez-le, en séparant des autres dossiers par un point-virgule.

+1

J'ai manuellement regardé pour voir où le sqlcmd.exe est localisé et vérifié que le dossier soit dans la variable de système de PATH, je ne verrai pas ce que retourne WHERE SQLCMD et vérifie cela aussi. Merci! – Rishi