Userinit автозапуск C# Windows 10

Вопрос или проблема

Я попробовал этот код, чтобы добавить свою программу в \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon Userinit для автозапуска на Windows 10. Вот мой код:


using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TempCode
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            AddToRegedit();
        }
        void AddToRegedit()
        {
            string programPath = @"C:\Users\XPS\Videos\TestApp.exe";
            RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
            string newValue = @"C:\WINDOWS\system32\userinit.exe," + programPath + ",";
            key.SetValue("Userinit", newValue, RegistryValueKind.String);
            key.Close();

            Console.WriteLine("Программа добавлена!");
        }
    }
}

Я запустил это с отладкой с правами администратора, но ничего не изменилось. Если у вас есть идеи, что не так, пожалуйста, помогите!

Я попробовал: перезагрузить ОС, запустить программу без отладки и даже спросить у ChatGPT, но ничего не изменилось.

Также если в cmd я пишу REG QUERY HKLM\Software\Microsoft\Windows NT\, то выдает ошибку: Неверный синтаксис. Введите “REG QUERY /?” для справки по использованию. Может, это из-за пробела?

ИЗМЕНЕНИЕ: Я сам исправил проблему, вот код:

void RegeditValueChange()
{
    ProcessStartInfo processInfo = new ProcessStartInfo()
    {
        FileName = "cmd",
        Arguments = "/k REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\" /v Userinit /t REG_SZ /d C:\\Path\\To\\Your\\File.exe /reg:64 /f"
        // Уберите комментарии, чтобы выполнить команду без окна
        //UseShellExecute = false,
        //RedirectStandardOutput = true,
        //RedirectStandardError = true,
        //CreateNoWindow = true

    };
    using (Process process = Process.Start(processInfo))
    {
        process.WaitForExit();
        // Раскомментируйте это для ведения журнала (если вы выполняете без окна cmd)
        /*string output = process.StandardOutput.ReadToEnd();
        string error = process.StandardError.ReadToEnd();


        if (!string.IsNullOrWhiteSpace(output))
        {
            Console.WriteLine("Вывод: " + output);
        }

        if (!string.IsNullOrWhiteSpace(error))
        {
            Console.WriteLine("Ошибка: " + error);
        }*/
    }

}

Если вы используете 32-разрядную систему, просто уберите /reg:64. Также не рекомендую использовать пробелы в пути к вашей программе, но если вы это сделали, попробуйте добавить \”\” в начале и в конце вашего пути. /f заставляет программу не спрашивать о замене.

Пожалуйста, не удаляйте этот вопрос, я хочу, чтобы люди могли найти решение, если захотят!

Ответ или решение

Конечно! Ниже приведен полный ответ на ваш вопрос о добавлении программы в автозагрузку через реестр с использованием C# на Windows 10, с учетом вашего первоначального кода и решением проблемы, которое вы нашли.

Ответ:

Для автоматического запуска приложения при входе в систему в Windows 10 обычно используется изменение ключа Userinit в реестре. Однако, изменения в реестре могут быть затруднительными, если процесс не имеет необходимых привилегий, или если пути указаны неверно.

Исправленный код

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

using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace TempCode
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            RegeditValueChange();
        }

        void RegeditValueChange()
        {
            // Укажите путь к вашему приложению
            string programPath = @"C:\Path\To\Your\File.exe";

            ProcessStartInfo processInfo = new ProcessStartInfo()
            {
                FileName = "cmd",
                Arguments = $"/c REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\" /v Userinit /t REG_SZ /d \"C:\\WINDOWS\\system32\\userinit.exe,{programPath},\" /reg:64 /f",
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                CreateNoWindow = true
            };

            using (Process process = Process.Start(processInfo))
            {
                process.WaitForExit();

                // Логирование вывода, если требуется
                string output = process.StandardOutput.ReadToEnd();
                string error = process.StandardError.ReadToEnd();

                if (!string.IsNullOrWhiteSpace(output))
                {
                    Console.WriteLine("Output: " + output);
                }

                if (!string.IsNullOrWhiteSpace(error))
                {
                    Console.WriteLine("Error: " + error);
                }
            }
        }
    }
}

Объяснение кода

  1. Путь к программе: Обратите внимание, что в строке programPath следует указать правильный путь к вашему исполняемому файлу. Убедитесь, что в этом пути нет пробелов или корректно используйте кавычки.

  2. Использование командной строки: Для изменения значения в реестре вызывается командная строка с помощью ProcessStartInfo. Параметры включают:

    • /c — чтобы выполнить команду и завершить.
    • REG ADD — для добавления нового значения.
    • Параметр /reg:64 используется для 64-битной версии Windows. Если система 32-битная, этот параметр можно опустить.
  3. Флаги:

    • /f — подавляет запрос на подтверждение перезаписи значения, если оно уже существует.

Важные заметки

  • Убедитесь, что программа запускается с правами администратора, иначе возможно, что изменения в реестре не будут применены.
  • Будьте аккуратны при редактировании реестра, так как это может повлиять на стабильность системы.
  • Рекомендуется создать резервную копию реестра перед внесением изменений.

Используя данный метод, вы сможете успешно добавить ваш файл в автозапуск системы. Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...