Программно изменить оболочку Windows - PullRequest
13 голосов
/ 11 октября 2011

Я работаю над проектом, который будет «встроен» в систему Windows 7, это будет достигнуто путем отключения диспетчера задач и изменения оболочки Windows для приложения, а также других вещей.

Здесь я хочу программно изменить оболочку Windows между приложением и explorer.exe, я хотел бы знать, есть ли способ сделать это в C #.

В настоящее время у меня есть несколько строк кода, которые пытаются изменить запись реестра для оболочки Windows, но после обновления редактора реестра ничего не происходит, код выглядит следующим образом:

    regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Microsoft", true).OpenSubKey("Windows NT", true).OpenSubKey("CurrentVersion", true).OpenSubKey("Winlogon", true);
    regKey.DeleteValue("Shell");
    regKey.SetValue("Shell", shell);
    regKey.Close();

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

Буду очень признателен, если кто-нибудь скажет мне, возможно ли это сделать программно, и где я ошибаюсь.

Кроме того, я был бы рад узнать, есть ли способ кодировать программу, чтобы она всегда работала с правами администратора, чтобы редактирование реестра работало.

Большое спасибо,

Richard

1 Ответ

13 голосов
/ 12 октября 2011

После долгих поисков в других местах в сети, я наконец-то заставил Shell перейти на исполняемый файл создаваемого приложения.

Процесс «Встраивание» - это трехэтапный процесс,в случае программного обеспечения, над которым я работаю, мы начинаем с отключения диспетчера задач, затем устанавливаем исполняемый файл оболочки в реестре локального компьютера, а затем повторяем процесс в реестре текущего пользователя.

Ниже приведенкод, который достигает этого:

public void embedSoftware()
{
    try
    {
        // Disable Task Manager
        regKey = Registry.CurrentUser.OpenSubKey(subKey, true).CreateSubKey("System");
        regKey.SetValue("DisableTaskMgr", 1);
        regKey.Close();
        // Change the Local Machine shell executable
        regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
        regKey.SetValue("Shell", shell, RegistryValueKind.String);
        regKey.Close();
        // Create the Shell executable Registry entry for Current User
        regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
        regKey.SetValue("Shell", shell);
        regKey.Close();
        MessageBox.Show("Embedding Complete");

    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}

В этом примере переменная "shell" представляет собой строку, содержащую путь к исполняемому файлу, который будет использоваться в качестве новой оболочки Windows.

В дополнение к этому естьметод для «встраивания» программного обеспечения, этот метод просто удаляет значения «DisableTaskMgr» и «Shell» из реестров текущего пользователя, а также сбрасывает значение «Shell» в реестре локального компьютера в «explorer.exe».

Надеюсь, это поможет тем, у кого возникают проблемы с программным изменением оболочек Windows.

С уважением,

Ричард

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...