string commandText = "exp username/password@orcl file=d:/%Date:~0,10%.dmp log=d:/%Date:~0,10%.log";
                           Process process = new Process(); //开启新进程
process.StartInfo.FileName = "cmd.exe"; //打开运行cmd
// process.StartInfo.Arguments = commandText; //要运行的命令
process.StartInfo.UseShellExecute = false; //关闭shell的使用
process.StartInfo.RedirectStandardInput = true; //重定向标准输入
process.StartInfo.RedirectStandardOutput = true; //重定向标准输出
process.StartInfo.RedirectStandardError = true; //重定向错误设置
process.StartInfo.CreateNoWindow = true; //设置不显示cmd运行界面
try
{
process.Start(); // 启动进程
process.StandardInput.WriteLine(commandText);
process.StandardInput.WriteLine("exit");
process.WaitForExit();
if (process.HasExited)
{
int iExitCode = process.ExitCode;
if (iExitCode == 0) //正常完成
{
strOutput = "执行成功";
}
else //执行有错
{
strOutput = "执行失败";
}
}
}
catch(Exception e)
{
strOutput = e.Message;
}
finally
{
process.Close();
}
调用这个方法执行时,当导出的数据库较小时,程序正常执行导出功能,所调用的CMD.EXE、EXP.EXE程序也自动退出,但当导出的数据库较大时,调用的CMD命令无法执行,好像卡住不动了(程序卡在这个语句不动了:process.WaitForExit();),调用的程序无法正常退出,此时若重启IIS后,在任务管理器中强制结束CMD.EXE后,此时EXP命令会继续自动执行命令,完成后自动退出,再查看导出的DMP文件是正常的,此问题如何解决,请高手门如何解决?本人感激不尽!

解决方案 »

  1.   

    楼主这个问题还解决了?我也遇到了相同问题,卡壳了 好像是备份到52.6M 吧 就无响应了
    强制关闭后 后台CMD正常往下执行并退出,如果找到解决还请回下
      

  2.   

    Process.start("exp.exe","user/password@数据库 file=... ...");
    这样好像可以
      

  3.   

     你好,上次那个备份ORACLE数据库,备到一半卡住的总题你解决没有,我现在也遇到了,如果解决了请在你那个贴子把正确方法也贴出来,大家看一下.谢谢..