C# Как программно добавить приложение в автозагрузку Windows?

Всем привет! Пытаюсь программно добавить свое приложение в автозагрузку. Однако при старте системы приложение открывается и сразу же закрывается. При запуске приложения вручную оно работает. Добавляю в автозагрузку следующим способом

private void installButton_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                richTextBox_OK.Text = "";
                richTextBox_ERROR.Text = "";

                string dirPath = folderBrowserDialog.SelectedPath + "\\AVUC";
                string fileExePath = folderBrowserDialog.SelectedPath + "\\AVUC\\AVUC Microsoft Version Controller.exe";
                string fileLinkPath = "C:\\Users\\" + userName + "\\AppData\\Roaming\\Microsoft\\Windows" +
                    "\\Start Menu\\Programs\\Startup\\AVUC Microsoft Version Controller.lnk";
                string fileTxtPath = folderBrowserDialog.SelectedPath + "\\AVUC\\configLocal.txt";

                try
                {
                    richTextBox_OK.Text += "UserName: " + userName + "\n";

                    if (!Directory.Exists(dirPath)) 
                    { 
                        Directory.CreateDirectory(dirPath);
                        richTextBox_OK.Text += "Directory \"" + dirPath + "\" created\n";
                    }
                    else
                    {
                        richTextBox_ERROR.Text += "ERROR!\tDirectory \"" + dirPath + "\" is already exists\n";
                        richTextBox_ERROR.Text += "NOT INSTALLED\n";
                        return;
                    }

                    File.Copy("AVUC Microsoft Version Controller.exe", fileExePath);
                    richTextBox_OK.Text += "File \"AVUC Microsoft Version Controller.exe\" copy created\n";
                    File.Copy("configLocal.txt", fileTxtPath);
                    richTextBox_OK.Text += "File \"configLocal.txt\" copy created\n";

                    ShortCut.Create(fileExePath, fileLinkPath, "", "AVUC Microsoft Version Controller");
                    richTextBox_OK.Text += "Link created: " + fileLinkPath + "\n";

                    richTextBox_OK.Text += "\tINSTALLED\n";
                }
                catch (Exception ex)
                {
                    richTextBox_ERROR.Text += "ERROR!\t" + ex.Message + "\n";
                    richTextBox_ERROR.Text += "\tNOT INSTALLED\n";
                }
            }
        }


Создание ярлыка
ShortCut.Create(fileExePath, fileLinkPath, "", "AVUC Microsoft Version Controller");

позаимствовал здесь https://www.cyberforum.ru/csharp-net/thread177408.html

Если вручную создать ярлык и поместить в папку автозагрузки работает ровно. Почему-то ему не нравятся программно созданные ярлыки или метод создания ярлыка получается. Если кто-то занет - подскажите плиз))
  • Вопрос задан
  • 1465 просмотров
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Сохраняете и импортируете в реестр, то же самое можете сделать в инсталлере или при настройке программы.

hcr.reg

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"OneDrive"="\"C:\\Users\\kvn\\AppData\\Local\\Microsoft\\OneDrive\\OneDrive.exe\" /background"
"CCXProcess"="\"C:\\Program Files (x86)\\Adobe\\Adobe Creative Cloud Experience\\CCXProcess.exe\""
"com.squirrel.Teams.Teams"="C:\\Users\\kvn\\AppData\\Local\\Microsoft\\Teams\\Update.exe --processStart \"Teams.exe\" --process-start-args \"--system-initiated\""
"Discord"="C:\\Users\\kvn\\AppData\\Local\\Discord\\Update.exe --processStart Discord.exe"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@maximsemin23
Попробуй из программы на c# запускать питон скрипт, с ним всё должно работать

import os
import winshell
import inspect
from getpass import getuser
from win32com.client import Dispatch


filename = inspect.getframeinfo(inspect.currentframe()).filename
user = getuser()

wDir = os.path.dirname(os.path.abspath(filename))
target = wDir + r'\program_name.exe'
path = rf'C:\Users\{user}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\program_name.lnk'
icon = wDir + r'\icon_name.ico'
shell = Dispatch('WScript.Shell')
shortcut = shell.CreateShortCut(path)
shortcut.Targetpath = target
shortcut.WorkingDirectory = wDir
shortcut.IconLocation = icon
shortcut.save()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы