从控制台应用程序调用cmd.exe时,查询会话不工作

从控制台应用程序调用cmd.exe时,查询会话不工作,cmd,wow64,Cmd,Wow64,查询会话在使用任何CPU或X86目标平台时都不工作,但在使用X64平台时工作 [TestMethod] public void TestMethod() { ProcessStartInfo info = new ProcessStartInfo("cmd.exe","/k query session"); Process proc = new Process(); proc.StartInfo = info; proc.Start(); } 有人能解释为什么会

查询会话在使用任何CPU或X86目标平台时都不工作,但在使用X64平台时工作

[TestMethod]
public void TestMethod()
{
    ProcessStartInfo info = new ProcessStartInfo("cmd.exe","/k query session");
    Process proc = new Process();
    proc.StartInfo = info;
    proc.Start();
}

有人能解释为什么会这样吗?当我将它设置为默认处理器体系结构设置为X86的任何CPU时,有什么方法可以使它工作吗

您的计算机有两个cmd.exe版本:

  • c:\windows\system32\cmd.exe
  • c:\windows\syswow64\cmd.exe
当您使用任何CPU或x86运行应用程序时,您正在调用syswow64版本。此版本的cmd.exe没有
query
命令:

c:\Windows\SysWOW64>cmd.exe
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

c:\Windows\SysWOW64>query
'query' is not recognized as an internal or external command,
operable program or batch file.

要使其在任何CPU或x86中工作,请确保调用system32版本的cmd.exe

此问题可以通过使用pinvoke.net轻松解决。这是解决办法

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

[TestMethod]
public void TestMethod3()
{
    IntPtr ptr = new IntPtr();
    Wow64DisableWow64FsRedirection(ref ptr);
    ProcessStartInfo info = new ProcessStartInfo(@"cmd.exe", "/k query session");
    Process proc = new Process();
    proc.StartInfo = info;
    proc.Start();
    Wow64RevertWow64FsRedirection(ptr);
}

在任何CPU、X86和X64目标平台上都能完美工作

没错,感谢您的回复,但是是否有query.exe的替代方案可以解决此问题???@virali您可以尝试
qwinsta
,它相当于
query session
。@wmz
qwinsta
在SysWOW64 cmd中也不可用。exe@wmz我尝试了queryuser和qwinsta,并获得了“不被认为是内部或外部命令”。有什么办法解决这个奇怪的问题吗?