我试图在C#中从SQL * Plus获取Oracle客户端版本,并在64位Windows 7和32位Windows XP上获得不同的结果。
这是我的代码:
try
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "sqlplus.exe";
p.StartInfo.Arguments = "-v";
p.Start();
OracleClient = p.StandardOutput
.ReadToEnd()
.Split(':')
.TrimStart()
.TrimEnd('\n','\r');
p.WaitForExit();
}
catch (Exception)
{
OracleClient = String.Empty;
}
在Windows 7上,OracleClient == "Release 11.2.0.1.0 Production"
。
在Windows XP上,OracleClient == ""
。
但是当我在XP中直接在命令行输入命令(sqlplus -v
)时,它可以工作。所以我的问题是:为什么我的程序在Windows 7上运行,而在Windows XP上运行。
更新
我发现了错误:我正在阅读这个过程'在给它机会完成之前输出。
try
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "sqlplus.exe";
p.StartInfo.Arguments = "-v";
p.Start();
p.WaitForExit();
OracleClient = p.StandardOutput
.ReadToEnd()
.Split(':')
.TrimStart()
.TrimEnd('\n','\r');
}
catch (Exception)
{
OracleClient = String.Empty;
}