在Windows中,打开命令提示符(cmd.exe)时,注册表键:

HKLM Software Microsoft 命令处理器
HKCU Software Microsoft 命令处理器

检查一个称为“ Autorun”的值。如果发现,则执行该值中命名的批处理文件,提供类似于自动EXECEC的功能。如果两个键都包含自动伦值,则将运行两个键。惊人的!

我正在使用 Process.Start 运行cmd.exe,并且没有发生自动行为。我当前的代码是:

private openShell( string folder )
{
    ProcessStartInfo startInfo = new ProcessStartInfo()
        {
            FileName = Environment.GetEnvironmentVariable( "COMSPEC" ) ?? "cmd.exe",
            Arguments = "/k cd \"" + folder + "\"",
            UseShellExecute = true
        };

    try
    {
        using ( var exeProcess = System.Diagnostics.Process.Start( startInfo ) )
        {
            exeProcess.WaitForExit();
        }
    }
    catch
    {
        // Log error.
    }
}

我还尝试将其简化为最简单的形式:

System.Diagnostics.Process.Start( "cmd.exe" );

我尝试的所有操作都可以完美工作(在命令窗口中启动),但是自动运行行为永远不会发生。

有帮助吗?

解决方案

我找到了。问题在于Windows商店(和检索)如何从注册表中使用64位版本的操作系统。我的代码很好。这 有关MSDN的文章 详细介绍。从该文章中:

在64位窗口上,注册表条目的一部分被单独存储用于32位应用程序和64位应用程序,并使用注册表重定向器和注册表反射映射到单独的逻辑注册表视图中,因为应用程序的64位版本可以使用与32位版本相比,注册表键和值不同。也有没有重定向或反映的共享注册表键。

对我来说,解决方案是在下面添加我的自动钥匙:

HKLM\Software\Wow6432Node\Microsoft\Command Processor

真正得到我的山羊的是我以前遇到过。我很少对注册表愚蠢,我只是完全忘记了它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top