【问题标题】:Starting cmd.exe problem启动cmd.exe问题
【发布时间】:2011-05-16 17:49:18
【问题描述】:

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

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

检查名为“AutoRun”的值。如果找到,则执行值中命名的批处理文件,提供类似自动执行的功能。如果两个键都包含 AutoRun 值,则两者都将运行。太棒了!

我正在使用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" );

我尝试的一切都运行良好(即启动了一个命令窗口),但从未发生自动运行行为。

【问题讨论】:

  • 检查注册表的代码在哪里?
  • 可以了,我没发现代码有什么问题
  • 如果您只将“自动运行”放在 HKLM 密钥中,您的问题可能是虚拟化。你有没有在 HKCU 中放了一些东西却一无所获?另外,您是否通过手动启动命令提示符对此进行了测试,所以您知道唯一的问题是您的代码如何启动它们?

标签: c# windows-7 cmd autorun


【解决方案1】:

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

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

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

HKLM\Software\Wow6432Node\Microsoft\Command Processor

真正让我着迷的是我以前遇到过这种情况。我很少和注册表傻瓜,我只是完全忘记了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2012-01-17
    • 2012-07-01
    • 2023-04-06
    • 1970-01-01
    • 2011-09-20
    • 2011-09-28
    相关资源
    最近更新 更多