1

没有错误。没有例外。Second 和 Third 产生一个文件 f[1]/[2]。但不是第一个。为什么?我使用调试验证该命令是好的。并使用我从 debug 捕获的命令,cut 并过去到命令行,我可以生成文件 [f0]。

        string[] f = new string[4];
        f[0] = "SNICKER.reg.txt";
        f[1] = "SNDIS.reg.txt";
        f[2] = "SNICS.reg.txt";
        f[3] = "Ssmf.xml";

        //First
        Run_Process("REG", "EXPORT HKEY_LOCAL_MACHINE\\SOFTWARE\\sridge\\Snicker " + f[0] + " /y");

        //Second
        Run_Process("REG", "EXPORT HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\SNDIS " + f[1] + " /y");

        //Third
        Run_Process("REG", "EXPORT HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SClass " + f[2] + " /y");



    private static void Run_Process(string exe_name, string arg)
    {

        Process myProcess = new Process();
        try
        {
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.FileName = exe_name;
            //myProcess.StartInfo.Arguments = "/C getLH.exe > feed.txt";
            myProcess.StartInfo.Arguments = arg;
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.Start();
            myProcess.WaitForExit();

        }
        catch (Exception ep)
        {
            Console.WriteLine(exe_name + " " + arg + ". Error: " + ep.Message);

        }
    }
4

2 回答 2

2

当您的应用程序在 64 位操作系统上运行并尝试访问注册表时,您最终可能会读取错误文件夹中的值。
当您为 x86 平台编译时会发生这种情况,因此您的代码将作为 32 位代码发出。
在这种情况下,注册表重定向器会启动并将您手工制作的注册表路径更改为指向内部文件夹HKLM\SOFTWAREHKLM\SOFTWARE\Wow6432Node.
这种行为背后的原因很复杂,您可以尝试在这里阅读一些内容

话虽如此,当我们将 REG 程序作为从使用AnyCPU. 此应用程序应作为 64 位代码执行,但由于某种原因,执行的 REG 程序是 32 位版本(是的,REG.EXE 有两个版本,一个在 system32 中,一个在 SysWow64 中),此版本搜索您的数据在错误的道路上。也许这与 PATH 环境变量的当前值有关。

作为旁注。Microsoft 做出的最糟糕的决定之一是允许应用程序将其配置数据存储在注册表中。如果可能的话,我真的建议改变这种行为

更新 我可以确认,在 64 位操作系统上,编译为 AnyCPU 的控制台应用程序运行上述执行 REG.EXE 命令的代码,从 WINDOWS\SYSWOW64 启动 REG.EXE 的 32 位版本。我已经与 ProcMon 核对过,但我无法解释为什么会发生这种情况。它与 PATH 环境变量无关,因为我只有 C:\WINDOWS\SYSTEM32 的路径

于 2013-04-26T21:12:42.170 回答
0

查看Process.start:如何获得输出?并尝试使用该方法查看命令的输出。我认为不会有任何异常,因为它只会捕获该代码块的异常,而不是您尝试运行的外部程序的异常。

于 2013-04-26T20:11:39.000 回答