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

Место общения программистов C#
Ответить
Anonymous
 Автозапуск Userinit C# Windows 10

Сообщение Anonymous »

Я попробовал этот код, чтобы добавить свою программу в автозапуск \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon Userinit на C# в 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("Program added!");
}
}
}
Я запустил его в режиме отладки с правами администратора, но ничего не изменилось.
Если вы знаете, что происходит, пожалуйста, помогите мне!
Я пробовал: перезапустить ОС, запустить программу без отладки и даже запросить 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"
//Turn this 4 comments to execute cmd without window
//UseShellExecute = false,
//RedirectStandardOutput = true,
//RedirectStandardError = true,
//CreateNoWindow = true

};
using (Process process = Process.Start(processInfo))
{
process.WaitForExit();
// Uncomment this for logging (if you execute without cmd window)
/*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);
}*/
}

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

Подробнее здесь: https://stackoverflow.com/questions/790 ... windows-10
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»