2010-11-28 80 views
0

在Windows中,當一個命令提示符打開(CMD.EXE),註冊表項:啓動cmd.exe的問題

HKLM \ SOFTWARE \微軟\命令處理器
HKCU \軟件\微軟\ COMMAND處理器

被檢查一個名爲「AutoRun」的值。如果找到,則會執行該值中指定的批處理文件,從而提供類似autoexec的功能。如果兩個鍵都包含自動運行值,則兩者都將運行。真棒!

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

一切我嘗試的作品完美(在啓動的命令窗口),而自動運行行爲從不發生。

+0

檢查註冊表的代碼在哪裏? – bitxwise 2010-11-28 02:09:59

回答

2

我找到了。問題在於Windows如何在64位版本的操作系統中存儲(和檢索)來自注冊表的數據。我的代碼很好。 article on MSDN進行了一些細節。從文章:

在64位Windows中, 註冊表項的多個部分被分別 用於32位應用程序和64位 應用存儲並映射到使用 註冊表重定向器分開 邏輯註冊表觀點和註冊表 的反映,因爲應用程序的64位版本 可能使用不同的 註冊表項和值,而不是32位版本的 。還有共享 註冊表項不重定向 或反映。

對我來說,解決辦法是增加我的自動運行項下:

HKLM\Software\Wow6432Node\Microsoft\Command Processor 

真正得到我的山羊是我以前碰到這個。我很少與註冊表混淆,我完全忘記了它。