У меня есть приложение ASP.NET, которое запускает sqlcmd.exe в качестве процесса. В двух наших трех тестовых средах у нас нет проблем. Однако на третьей машине, хотя sqlcmd.exe был установлен вместе с инструментами подключения клиентов, Process.exe не может найти sqlcmd.exe. Показанная ошибка:SQLCMD не был найден при запуске процесса из 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
Я в затруднении, почему это происходит. Различия между случаем, когда все в порядке, в отличие от того, когда он выходит из строя, следующие:
1) Когда это работает, существует полная установка SQL-сервера. Когда он терпит неудачу, мы устанавливаем sqlcmd только как загруженный установочный пакет, который указывает на SQL-сервер, который находится в другом месте.
2) Когда это работает, приложение запускается с того же тома диска, что и установка Windows. На машине, которая не работает, приложение устанавливается на другой том из установки Windows.
Другие ключевые моменты: переменная PATH показывает местоположение sqlcmd.exe, пользователь, являющийся идентификатором пула приложений, является частью локальных системных администраторов, при запуске sqlcmd.exe через командную строку ожидаются результаты.
Любая помощь будет высоко оценена.
Благодаря
EDIT: Добавление кода:
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();
}
Мы тоже в недоумении, не видя ваш код, как кто-либо может ответить на это точно. Это может быть по ряду причин. Возможно, одна из неработающих сред не настроена точно так же, как 2 рабочие среды .. вид как стрельба в темноте и ожидающая попадания в глаза быков каждый раз. Пожалуйста, предоставьте более значимую информацию или код. Можете ли вы показать, как вы указываете на другие серверы sql ..? – MethodMan
@MethodMan, мне все равно, работает ли соединение SQL, я просто пытаюсь добраться до точки, где выполняется SQLCMD. Я попытался предоставить столько информации, сколько я думал, потребуется, но я обновил исходный вопрос с помощью кода, который используется для выполнения SQLCMD. – Rishi
Извините за интервал! Спасибо @MethodMan за его исправление – Rishi