es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“Query User” llamado a través de CMD.exe no produce ninguna salida.

Estoy tratando de llamar y recoger los datos devueltos por el comando CMD query user.

Llamar a esto a través de cmd desde la barra de inicio de Windows me da un resultado normal.

Llamar a esto a través de esta función de c# no muestra ninguna salida.

public void callQueryUser()
{
    ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");
    Process p = Process.Start(psi);

    string cmd = string.Format(@"/c query user");

    psi.Arguments = cmd;

    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    psi.CreateNoWindow = true;
    psi.WaitForExit();

    string result = p.StandardOutput.ReadToEnd();
    MessageBox.Show(result);
}

He comprobado y la ventana dice que el comando no se puede encontrar… También comprobé si ambos son el mismo cmd.exe y eso también es cierto. Parece que llamar a cmd.exe a través de C# hace algún tipo de diferencia. ¿Alguien tiene alguna idea de qué podría comprobar a continuación?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo probar ni ejecutar el código. Sin embargo, puede haber varias razones por las cuales no puede recopilar datos al llamar al comando query user mediante C#:

    1. Ruta incorrecta: Asegúrese de que la ruta del archivo cmd.exe sea correcta. Por lo general, se encuentra en el directorio C:\Windows\System32. Puede usar Environment.SystemDirectory + @"\cmd.exe" para obtener la ruta dinámicamente.
    2. Argumentos faltantes: Asegúrese de asignar correctamente los argumentos al proceso cmd.exe. Como se ve en el fragmento de código proporcionado, la propiedad Arguments de psi se asigna después de iniciar el proceso, lo cual puede causar problemas. Intente establecer la propiedad de argumentos antes de iniciar el proceso.

    3. Redirección de salida: La propiedad de redirección de salida, RedirectStandardOutput, está activada en el código. Esto significa que la salida del comando se capturará en el flujo StandardOutput en lugar de mostrarse en la consola. Asegúrese de leer de este flujo para obtener el resultado.

    4. Problemas de tiempo: El método WaitForExit() del objeto psi asegura que el proceso haya completado su ejecución antes de intentar leer la salida. Sin embargo, puede haber casos en los que el proceso tarde más de lo esperado en completarse o se bloquee. En tales casos, es posible que necesite utilizar un enfoque asíncrono y esperar a que el proceso se complete antes de leer la salida.

    Puede intentar depurar su código y verificar los valores de las variables para ver si coinciden con sus expectativas. Además, intente ejecutar el código con privilegios elevados para descartar problemas de permisos.

Comments are closed.