0

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

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

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

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

对我上述问题的任何建议!

4

1 回答 1

0

由于 runas 没用,请尝试嵌入应用程序清单

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

这应该可行,无论如何你总是很方便:

myprocess.StartInfo.UserName = "Administrator"; 
myprocess.StartInfo.Password = "password"; 
于 2012-09-21T04:45:06.090 回答