Добавление ярлыка в автозагрузку - C#
Формулировка задачи:
Здравствуйте, добавляю свою программу в автозагрузку таким способом:
Но это работает не на всех ОС, или срабатывает не всегда, возможно что-то блокирует, например антивирус.
Помню решал эту проблему добавлением ярлыка программы в ручную в папку автозагрузки, папку открывал командой shell:startup, т.к. этот путь разный на разных ОС, есть необходимость получать этот путь в программе и добавлять туда ярлык программно. Как это можно сделать?
public bool SetAutorunValue(bool autorun)
{
string name = Path.GetFileNameWithoutExtension(Application.ExecutablePath); //Имя программы которую нужно добавить (без exe)
string ExePath = System.Windows.Forms.Application.ExecutablePath;
RegistryKey reg;
reg = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");
try
{
if (autorun)
reg.SetValue(name, ExePath);
else
reg.DeleteValue(name);
reg.Close();
}
catch
{
return false;
}
return true;
}
//Вызов функции
SetAutorunValue(true); } //Добавить в автозагрузку
SetAutorunValue(false); } //Убрать автозагрузкуРешение задачи: «Добавление ярлыка в автозагрузку»
textual
Листинг программы
using System;
using Microsoft.Win32.TaskScheduler;
class Program
{
static void Main(string[] args)
{
// Get the service on the local machine
using (TaskService ts = new TaskService())
{
// Create a new task definition and assign properties
TaskDefinition td = ts.NewTask();
td.RegistrationInfo.Description = "Does something";
// Create a trigger that will fire the task at this time every other day
td.Triggers.Add(new DailyTrigger { DaysInterval = 2 });
// Create an action that will launch Notepad whenever the trigger fires
td.Actions.Add(new ExecAction("notepad.exe", "c:\\test.log", null));
// Register the task in the root folder
ts.RootFolder.RegisterTaskDefinition(@"Test", td);
// Remove the task we just created
ts.RootFolder.DeleteTask("Test");
}
}
}