Подтвердить что ты не робот

Программно изменить оболочку Windows

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

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

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

    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();

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

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

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

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

Ричард

4b9b3361

Ответ 1

После долгих поисков других мест в сети, я наконец-то получил 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 Shells.

Привет,

Ричард