通过c#.net进行oracle数据库转储

时间:2012-09-21 04:31:58

标签: c# .net oracle oracle10g

我有一个非常有趣的问题。

我使用Process.Start和“runas”动词以管理员身份运行进程,即

string currentstatus;
            ProcessStartInfo startInfo = new ProcessStartInfo();
            Process myprocess = new Process();
            try
            {
                startInfo.FileName = "cmd"; //
                startInfo.Verb = "runas";
                startInfo.Arguments = "/env /user:" + "Administrator" + " cmd";
                startInfo.RedirectStandardInput = true;
                startInfo.RedirectStandardOutput = true;
                startInfo.UseShellExecute = false; //'required to redirect
                startInfo.CreateNoWindow = true; // '<---- creates no window, obviously
                myprocess.StartInfo = startInfo; //
                myprocess.Start(); //
                System.IO.StreamReader SR;
                System.IO.StreamWriter SW;
                Thread.Sleep(200);
                SR = myprocess.StandardOutput;
                SW = myprocess.StandardInput;
                SW.WriteLine(commandexecuted); // 'the command you wish to run.....
                SW.WriteLine("exit"); // 'exits command prompt window
                Thread.Sleep(200);
                currentstatus = SR.ReadToEnd();

                SW.Close();
                SR.Close();

            }
            catch (Exception e)
            { }

表示已执行命令的内容为

exp *****/******@!!!!!!! owner =!!!!!!!! file =D:/SS.dmp

现在我的问题是

1)当我通过右键单击cmd.exe并选择“以管理员身份运行”手动运行上述查询时,它工作正常但是没有它会引发错误

2)所以我需要通过代码执行该过程。

我不知道我哪里出错了?

这只是采取oracle转储的方式,否则它可能有其他方式?

等待您的宝贵回应和评论......

更新1)

我也使用此代码通过

检查当前用户是否是管理员
    private static bool IsAdministrator()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(identity);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

它返回了我,因为当前用户只是管理员。

对我上述问题的任何认真!

1 个答案:

答案 0 :(得分:0)

由于runas无用,请尝试嵌入application manifest

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

这应该有用,无论如何你总是有用的:

myprocess.StartInfo.UserName = "Administrator"; 
myprocess.StartInfo.Password = "password";