在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行为永远不会发生。
答案 0 :(得分:2)
我找到了。问题在于Windows如何在64位版本的操作系统中存储(并检索)来自注册表的数据。我的代码很好。 article on MSDN详细介绍了{{3}}。从那篇文章:
在64位Windows上,部分内容 注册表项单独存储 适用于32位应用程序和64位应用程序 应用程序并映射到单独的 逻辑注册表视图使用 注册表重定向器和注册表 反射,因为64位版本 应用程序可能使用不同的 注册表项和值比 32位版本。还有共享 未重定向的注册表项 或反映。
我的解决方案是将我的AutoRun密钥添加到:
HKLM\Software\Wow6432Node\Microsoft\Command Processor
真正让我的山羊真的是我之前遇到过这种情况。我很少愚弄注册表,我只是完全忘记了它。