从控制台应用程序调用cmd.exe时,查询会话不工作
查询会话在使用任何CPU或X86目标平台时都不工作,但在使用X64平台时工作从控制台应用程序调用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(); } 有人能解释为什么会
[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
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
。@wmzqwinsta
在SysWOW64 cmd中也不可用。exe@wmz我尝试了queryuser和qwinsta,并获得了“不被认为是内部或外部命令”。有什么办法解决这个奇怪的问题吗?