通过Visual Studio(C#)运行cmd时获得不同的输出

通过Visual Studio(C#)运行cmd时获得不同的输出,c#,.net,visual-studio,cmd,registry,C#,.net,Visual Studio,Cmd,Registry,我想获取以下注册表项的内容: HKLM\Software\Microsoft\Windows\CurrentVersion\Run 我在Visual Studio中的代码是: public static string os_command(string command_str) { Process command = new Process { StartInfo = new ProcessStartInfo { FileName

我想获取以下注册表项的内容:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

我在Visual Studio中的代码是:

public static string os_command(string command_str)
{
    Process command = new Process
    {
       StartInfo = new ProcessStartInfo
       {
           FileName ="cmd.exe",
           Arguments = "/c" + command_str,
           RedirectStandardOutput = true,
           RedirectStandardError = true,
           RedirectStandardInput = true,
           UseShellExecute = false,
       }
    };
    command.Start();
    string output = command.StandardOutput.ReadToEnd();
    return output;
}
而命令_str是:

然而,当我从VisualStudio运行它时,我得到的输出与从命令行本身运行它不同


那么,我做错了什么呢?

我猜这可能与过程的琐碎有关。。i、 e.32位对64位。您能确认这两个进程具有相同的比特数吗?如果不是,请尝试确保它是,然后进行比较。输出有多大不同。。比如,你是否从C代码中得到错误?什么错误?请提供更多信息。@VikasGupta我没有得到任何错误,我只是得到一个不同的输出,我找不到它的来源。两台机器都是64位的。你说两台机器都是吗?要明确的是,您是否比较了两台不同机器的输出?如果是这样,你有理由相信它们应该是一样的吗?当您使用诸如RegEdit之类的工具手动浏览到相应的键时,您会看到什么?仅供参考,我指的是查询注册表的进程的比特数。不是机器。(我假设这台机器是64位的..最近很常见。)@VikasGupta我正在从一台机器运行它,在另一台机器上运行。我正在比较运行visual studio代码的输出与手动在命令行中运行命令的输出。另外,当我手动运行命令时,会收到正确的输出(与RegEdit中的输出相比)。另外,命令和代码都是从同一个shell运行的,并且使用相同的命令,因此我假设比特数应该是相同的。我认为这可能是“什么是虚拟化进程”的情况,问题可能是,虽然您认为在这两种情况下执行的cmd是相同的。。如果代码启动cmd.exe,它将从其父进程继承权限/其他环境属性。。这可能会导致注册表的虚拟化。尝试以管理员身份运行已编译的exe,您可能会得到相同的输出。您可能会猜测这可能与进程的位有关。。i、 e.32位对64位。您能确认这两个进程具有相同的比特数吗?如果不是,请尝试确保它是,然后进行比较。输出有多大不同。。比如,你是否从C代码中得到错误?什么错误?请提供更多信息。@VikasGupta我没有得到任何错误,我只是得到一个不同的输出,我找不到它的来源。两台机器都是64位的。你说两台机器都是吗?要明确的是,您是否比较了两台不同机器的输出?如果是这样,你有理由相信它们应该是一样的吗?当您使用诸如RegEdit之类的工具手动浏览到相应的键时,您会看到什么?仅供参考,我指的是查询注册表的进程的比特数。不是机器。(我假设这台机器是64位的..最近很常见。)@VikasGupta我正在从一台机器运行它,在另一台机器上运行。我正在比较运行visual studio代码的输出与手动在命令行中运行命令的输出。另外,当我手动运行命令时,会收到正确的输出(与RegEdit中的输出相比)。另外,命令和代码都是从同一个shell运行的,并且使用相同的命令,因此我假设比特数应该是相同的。我认为这可能是“什么是虚拟化进程”的情况,问题可能是,虽然您认为在这两种情况下执行的cmd是相同的。。如果代码启动cmd.exe,它将从其父进程继承权限/其他环境属性。。这可能会导致注册表的虚拟化。尝试以管理员身份运行已编译的exe,您可能会得到相同的输出。
reg query \\ip\HKLM\Software\Microsoft\Windows\CurrentVersion\Run