启动cmd.exe问题

时间:2010-11-28 01:24:10

标签: c# windows-7 cmd autorun

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

  

HKLM \ Software \ Microsoft \ Command Processor
  HKCU \ Software \ Microsoft \ Command Processor

检查

是否有一个名为“AutoRun”的值。如果找到,则执行值中指定的批处理文件,提供类似autoexec的功能。如果两个键都包含AutoRun值,则两个键都将运行。真棒!

我正在使用Process.Start运行cmd.exe并且未发生AutoRun行为。我目前的代码是:

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" );

我尝试的所有内容都能完美运行(启动命令窗口),但AutoRun行为永远不会发生。

1 个答案:

答案 0 :(得分:2)

我找到了。问题在于Windows如何在64位版本的操作系统中存储(并检索)来自注册表的数据。我的代码很好。 article on MSDN详细介绍了{{3}}。从那篇文章:

  

在64位Windows上,部分内容   注册表项单独存储   适用于32位应用程序和64位应用程序   应用程序并映射到单独的   逻辑注册表视图使用   注册表重定向器和注册表   反射,因为64位版本   应用程序可能使用不同的   注册表项和值比   32位版本。还有共享   未重定向的注册表项   或反映。

我的解决方案是将我的AutoRun密钥添加到:

HKLM\Software\Wow6432Node\Microsoft\Command Processor

真正让我的山羊真的是我之前遇到过这种情况。我很少愚弄注册表,我只是完全忘记了它。