-1

У меня есть приложение 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(); 
} 
+0

Мы тоже в недоумении, не видя ваш код, как кто-либо может ответить на это точно. Это может быть по ряду причин. Возможно, одна из неработающих сред не настроена точно так же, как 2 рабочие среды .. вид как стрельба в темноте и ожидающая попадания в глаза быков каждый раз. Пожалуйста, предоставьте более значимую информацию или код. Можете ли вы показать, как вы указываете на другие серверы sql ..? – MethodMan

+0

@MethodMan, мне все равно, работает ли соединение SQL, я просто пытаюсь добраться до точки, где выполняется SQLCMD. Я попытался предоставить столько информации, сколько я думал, потребуется, но я обновил исходный вопрос с помощью кода, который используется для выполнения SQLCMD. – Rishi

+1

Извините за интервал! Спасибо @MethodMan за его исправление – Rishi

ответ

0

Простая перезагрузка. Боже, я иногда ненавижу Windows.

Спасибо @Methodman за предложение.

0

Я бы предположил, что это о переменной PATH среды.

Пара испытаний! Один, откройте командное окно и введите

WHERE SQLCMD 

Это будет печатать в любом месте SQLCMD. Если вы ничего не получите, вам нужно будет обновить свой путь. Если вы что-то получаете, это может быть переменная пользовательской среды, а не переменная системной среды, которая будет использоваться ASP.NET.

Можете ли вы проверить, что версия SYSTEM этой переменной содержит правую папку? На win8 и выше откройте меню «Пуск» и введите «редактировать переменные системной среды». Затем нажмите «переменные среды» и убедитесь, что в разделе «Системные переменные» PATH содержит папку, возвращенную WHERE SQLCMD. Если нет, введите ее, разделив ее из других папок точкой с запятой.

+1

Я вручную посмотрел, где находится sqlcmd.exe, и проверил, что эта папка находится в системной переменной PATH, я не буду видеть, что WHERE возвращает SQLCMD, и проверить это тоже. Благодаря! – Rishi