Стартовая проблема cmd.exe - PullRequest
0 голосов
/ 28 ноября 2010

В Windows, когда открывается командная строка (cmd.exe), ключи реестра:

HKLM \ Программное обеспечение \ Microsoft \ Командный процессор
HKCU \ Программное обеспечение \ Microsoft \ Командный процессор

проверяются на значение, называемое «Автозапуск». Если найдено, пакетный файл, указанный в значении, выполняется, предоставляя функции, аналогичные autoexec. Если оба ключа содержат значения автозапуска, оба будут запущены. Отлично!

Я использую 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" );

Все, что я пробую, работает отлично (в том, что окно команд запускается), но поведение автозапуска никогда не происходит.

1 Ответ

2 голосов
/ 30 ноября 2010

Я нашел это. Проблема заключалась в том, как Windows хранит (и получает) данные из реестра в 64-разрядных версиях операционной системы. Мой код был в порядке. Статья на MSDN посвящена некоторым деталям. Из этой статьи:

В 64-битной Windows части записи реестра хранятся отдельно для 32-битных приложений и 64-битных приложения и сопоставлены в отдельные логические представления реестра с использованием перенаправитель реестра и реестр отражение, потому что 64-битная версия приложения могут использовать разные ключи реестра и значения, чем 32-битная версия. Есть также общие ключи реестра, которые не перенаправлены или отраженный.

Решением для меня было добавить мой ключ автозапуска в:

HKLM\Software\Wow6432Node\Microsoft\Command Processor

Что меня поразило, так это то, что я сталкивался с этим раньше. Я так редко дурачусь с реестром, что просто забыл об этом.

...