从ASP.NET运行进程时找不到SQLCMD

本文关键字:找不到 SQLCMD 进程 运行 ASP NET | 更新日期: 2023-09-27 18:25:28

我有一个ASP.NET应用程序,它将sqlcmd.exe作为进程启动。在我们三个测试环境中的两个环境中,我们没有问题。但是,在第三台计算机上,即使sqlcmd.exe与客户端连接工具一起安装,Process.exe也找不到sqlcmd.exe。显示的错误为:

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时,结果是预期的。

如有任何帮助,我们将不胜感激。

感谢

编辑:添加代码:

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

从ASP.NET运行进程时找不到SQLCMD

我想这是关于PATH环境变量的。

几次测试!第一,打开命令窗口并键入

WHERE SQLCMD

这将在任何可以看到SQLCMD的地方打印出来。如果您一无所获,则需要更新您的路径。如果你得到了一些东西,它可能是一个用户环境变量,而不是ASP.NET将使用的系统环境变量。

你能检查这个变量的SYSTEM版本是否包含正确的文件夹吗?在win8及以上版本中,打开开始菜单并键入"编辑系统环境变量"。然后单击"环境变量",并确保在"系统变量"下,PATH包含WHERE SQLCMD返回的文件夹。如果没有,请将其放入,并用分号与其他文件夹分隔。

一个简单的重新启动。天哪,我有时讨厌Windows。

感谢@Methodman的建议。