“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?
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#:cmd.exe
sea correcta. Por lo general, se encuentra en el directorioC:\Windows\System32
. Puede usarEnvironment.SystemDirectory + @"\cmd.exe"
para obtener la ruta dinámicamente.Argumentos faltantes: Asegúrese de asignar correctamente los argumentos al proceso
cmd.exe
. Como se ve en el fragmento de código proporcionado, la propiedadArguments
depsi
se asigna después de iniciar el proceso, lo cual puede causar problemas. Intente establecer la propiedad de argumentos antes de iniciar el proceso.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 flujoStandardOutput
en lugar de mostrarse en la consola. Asegúrese de leer de este flujo para obtener el resultado.Problemas de tiempo: El método
WaitForExit()
del objetopsi
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.