Добавить установленную программу в автозагрузку - PullRequest
0 голосов
/ 14 июня 2019

Я создаю установщик, используя шаблон установщика visual studio. Мне нужно добавить установленную программу для запуска для всех пользователей (я также устанавливаю ее для всех пользователей).

Я перепробовал так много подходов: добавил ярлык первичного вывода в папку «Автозагрузка пользователя». Этот подход не работает, потому что, когда я открываю вкладку автозагрузки из диспетчера задач, она есть, но ее статус отключен. Как я могу включить его по умолчанию? Я также пробовал подход с отдельной сборкой, которая переопределяет (на самом деле я пробовал много переопределений, таких как Install, OnCommited, OnAfterInstall) и записывает путь к моему exe в реестре, но это не работает, переопределение работает, но часть записи в реестр не работает. После этого я создал пример проекта, когда я делаю то же самое, и он работает, он добавляет запись в реестр. Я взял рабочий exe, запустил его во всех переопределениях (по одному) и что я получил? Это не сработало! Но когда я запускаю его вручную, это работает! Вместо запуска exe я попытался запустить Что я делаю не так? Как я могу добавить свой установленный в автозагрузку для всех пользователей? На самом деле мне нужно создать запись в HKLM, если я хочу, чтобы она работала для всех пользователей, верно? Как это можно сделать? Кто-нибудь знает какое-либо бесплатное программное обеспечение для создания установщика, который будет иметь возможность установить для всех пользователей и добавить к запуску для всех пользователей?

[RunInstaller(true)]
    public class InstallerClass : System.Configuration.Install.Installer
    {
        public InstallerClass()
          : base()
        {
        }

        protected override void OnCommitted(IDictionary savedState)
        {

            Directory.SetCurrentDirectory(Path.GetDirectoryName
            (Assembly.GetExecutingAssembly().Location));

            string appPath = Path.GetDirectoryName(
           Assembly.GetExecutingAssembly().Location) + $"\\App.WPF.exe";

            string exePath = Path.GetDirectoryName(
            Assembly.GetExecutingAssembly().Location) + $"\\AddToStartup.exe";

            Process.Start(exePath, $"App {appPath}");

            base.OnCommitted(savedState);

        }

        protected override void OnAfterInstall(IDictionary savedState)
        {


            Directory.SetCurrentDirectory(Path.GetDirectoryName
            (Assembly.GetExecutingAssembly().Location));

            string appPath = Path.GetDirectoryName(
           Assembly.GetExecutingAssembly().Location) + $"\\App.WPF.exe";

            string exePath = Path.GetDirectoryName(
            Assembly.GetExecutingAssembly().Location) + $"\\App.exe";

            Process.Start(exePath, $"App {appPath}");

            base.OnAfterInstall(savedState);

        }

        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);

            key.SetValue("123", "456");

            key.Close();
        }


        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            RegistryKey key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);

            key.SetValue("123", "456");

            key.Close();
        }


    }
...