2010-11-28 9 views
0

の開始:レジストリキー、コマンドプロンプトが(CMD.EXE)が開かれている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"); 

すべてが、自動実行行動は決して起こらない。

+0

レジストリをチェックするコードはどこにありますか? – bitxwise

+0

「自動実行」をHKLMキーに入れておけば、問題が仮想化されている可能性があります。コード内で問題は見つかりませんでした。 –

+0

あなたは何かをHKCUのものに入れて何もしませんでしたか?また、コマンドプロンプトを手で起動することでこれをテストしましたが、唯一の問題はコードの起動方法です。 –

答えて

2

私はそれを見つけました。問題は、Windowsが64ビットバージョンのオペレーティングシステムでレジストリからデータをどのように格納(および取得)するかであった。私のコードは問題ありませんでした。 article on MSDNにはいくつかの詳細があります。その記事から:64ビットWindowsの

、 レジストリエントリの部分は、32ビットアプリケーションと64ビット アプリケーションに対して別々 格納され、 レジストリリダイレクタを使用して別 論理レジストリ・ビューにマッピングアプリケーションの の64ビットバージョンは、 32ビットバージョンとは異なる レジストリキーと値を使用する可能性があるため、レジストリ が反映されます。 共有されている のリダイレクトされないレジストリキーもあります。本当に私のヤギを取得し、どのような

HKLM\Software\Wow6432Node\Microsoft\Command Processor 

が、私はこの前に実行してきたということです。

私のためのソリューションは、下の私の自動実行キーを追加することでした。私はレジストリをめちゃくちゃ騙すことはめったにありません。私はそれについて完全に忘れてしまいました。

関連する問題