Ejecutando comandos cmd con derechos de administrador

¿Cómo puedo ejecutar el comando **cd..** detrás de las escenas de Windows Form? (es decir, el usuario no puede verlo)

Gracias.

Consulte System.Diagnostics.Process http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

También hay esta respuesta SO a esta misma pregunta exacta: https://stackoverflow.com/a/1469790/25882

Ejemplo:

 System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; startInfo.Verb = "runas"; process.StartInfo = startInfo; process.Start(); 

Puede inicializar un nuevo System.Diagnostics.ProcessStartInfo que tenga la información necesaria para que se inicie su proceso además de WindowStyle que indica el estado de la ventana que se utilizará cuando se inicie el proceso, que puede ser Hidden , Maximized , Minimized o Normal . En su caso, configuraremos esto como Hidden para que el proceso que se iniciará no pueda recibir entrada ni mostrar la salida desde / hacia el usuario.

Ejemplo

 System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd.. myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo 

Captura de pantalla

La siguiente captura de pantalla representa el Administrador de tareas que muestra un proceso que fue iniciado por nuestra aplicación. Sin embargo, su ventana no es visible.

El proceso se está ejecutando sin mostrar su ventana

Aviso : el proceso iniciado no finalizará aunque cierre su aplicación.

Además, para ejecutar un Proceso como Administrador, puede establecer la propiedad Verb de la información de inicio del proceso en runas

Ejemplo

 System.Diagnostics.ProcessStartInfo myProcessInfo = new System.Diagnostics.ProcessStartInfo(); //Initializes a new ProcessStartInfo of name myProcessInfo myProcessInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"\System32\cmd.exe"; //Sets the FileName property of myProcessInfo to %SystemRoot%\System32\cmd.exe where %SystemRoot% is a system variable which is expanded using Environment.ExpandEnvironmentVariables myProcessInfo.Arguments = "cd.."; //Sets the arguments to cd.. myProcessInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Sets the WindowStyle of myProcessInfo which indicates the window state to use when the process is started to Hidden myProcessInfo.Verb = "runas"; //The process should start with elevated permissions System.Diagnostics.Process.Start(myProcessInfo); //Starts the process based on myProcessInfo 

Aviso : si tiene activado el Control de cuentas de usuario, se le puede pedir que permita que el proceso comience con permisos elevados primero si la aplicación que intentó llamar a este proceso no se estaba ejecutando con permisos elevados.

Si desea omitir el mensaje, creo que debe permitir que su aplicación principal comience con permisos elevados. Para hacer esto, deberá abrir el manifiesto de su aplicación y asegurarse de que se agrega la siguiente línea

  

Esto simplemente le indicará a su aplicación que comience solo con permisos elevados. Por lo tanto, cuando llame al proceso como Administrador, no habrá una solicitud ya que la persona que realiza el proceso se está ejecutando bajo un Administrador.

Gracias,
Espero que encuentres esto útil 🙂

El fragmento es “invisible” para el usuario, y también redirige la salida para que pueda usarlo de alguna manera (supongo que lo necesita).

 string output = null; try { ProcessStartInfo ps = new ProcessStartInfo("cmd"); ps.Arguments = "/c cd.."; ps.UseShellExecute = false; // Redirects the standard output so it reads internally in out program ps.RedirectStandardOutput = true; // Starts the process using (Process p = Process.Start(ps)) { // Reads the output to a string output = p.StandardOutput.ReadToEnd(); // Waits for the process to exit must come *after* StandardOutput is "empty" // so that we don't deadlock because the intermediate kernel pipe is full. p.WaitForExit(); } } catch { // manage errors } finally { if(output != null) { // Process your output } }