我有一个非常有趣的问题。
我使用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);
}
它返回了我,因为当前用户只是管理员。
对我上述问题的任何认真!
答案 0 :(得分:0)
由于runas无用,请尝试嵌入application manifest
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
这应该有用,无论如何你总是有用的:
myprocess.StartInfo.UserName = "Administrator";
myprocess.StartInfo.Password = "password";