0

Windows では、コマンド プロンプト (cmd.exe) を開くと、レジストリ キーは次のようになります。

HKLM\ソフトウェア\マイクロソフト\コマンド プロセッサ
HKCU\ソフトウェア\マイクロソフト\コマンド プロセッサ

「AutoRun」と呼ばれる値がチェックされます。見つかった場合、値で指定されたバッチ ファイルが実行され、autoexec のような機能が提供されます。両方のキーに AutoRun 値が含まれている場合、両方が実行されます。素晴らしい!

cmd.exe の実行に使用Process.Startしていますが、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 の動作はまったく発生しません。

4

1 に答える 1

2

見つけた。問題は、Windows がオペレーティング システムの 64 ビット バージョンでレジストリからデータを保存 (および取得) する方法にありました。私のコードは大丈夫でした。MSDNの記事で詳細が説明されています。その記事から:

64 ビット Windows では、アプリケーションの 64 ビット バージョンが32 ビット バージョンとは異なるレジストリ キーと値。リダイレクトまたは反映されない共有レジストリ キーもあります。

私にとっての解決策は、AutoRun キーを以下に追加することでした。

HKLM\Software\Wow6432Node\Microsoft\Command Processor

私のヤギを本当に得ているのは、私が以前にこれに遭遇したことです。レジストリをだますことはめったにないので、完全に忘れていました。

于 2010-11-29T23:53:01.433 に答える