Запустить программу при запуске windows 7 (автозапуск)

Я написал приложение, которое должно запускаться при запуске Windows. Я добавил запись в реестр Windows в HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Запись была успешно добавлена, но программа не запускается должным образом.

Я протестировал приложение на Windows 7 64 бит. Приложение должно иметь права администратора для запуска, может быть, поэтому оно не запускается?

Я также увидел, что значение записи не в кавычках, а остальные. Это обязательно?

Вот мой код C#:

            var registry = Registry.CurrentUser;
            var key = registry.OpenSubKey(runKeyBase, true);
            key.SetValue(KEY, directory + @"\" + filename);
            Registry.CurrentUser.Flush();

Как я могу заставить его работать?

3 ответа

Решение

Насколько я понимаю, это связано с настройками контроля доступа пользователей, которые позволяют запускать только подписанные приложения, иначе он будет запрашивать разрешения администратора.

Из-за этого во время запуска ОС просто не будет запускать приложение, даже если вы выполнили настройки реестра.

Также цитаты не являются обязательными. Вы можете иметь их или нет.

Я сделал так, чтобы поместить ярлык в папку "Автозагрузка". Настройки реестра не будут работать.

Кроме того, вы можете попробовать поместить файл в /system32 или /windows, а затем попробовать установить его в реестре.

Почему бы просто не поместить ярлык в папку "Автозагрузка"? Таким образом, вы также можете установить свойства ярлыка для запуска от имени администратора

Редактировать:

Перейдите к исполняемому файлу, который вы хотите запустить при запуске, и щелкните правой кнопкой мыши, создайте ярлык.

В свойствах этого ярлыка установите флажок "Запускать от имени администратора".

Затем поместите это в папку автозагрузки (вы можете получить ее, нажав Исследовать папку в меню "Пуск"). Это запустит это приложение при входе в Windows. Если UAC требует одобрения, он подскажет пользователю, можно ли запустить программу.

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

public static void runAsAdmin(string[] args)
    {
        ProcessStartInfo proc = new ProcessStartInfo();

        if (args != null)
            proc.Arguments = string.Concat(args);

        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
        proc.Verb = "runas";



        bool isElevated;
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);

        if (!isElevated)
        {

            try
            {
                Process.Start(proc);
            }
            catch
            {
                //No Admin rights, continue without them
                return;
            }
            //Close current process for switching to elevated one
            Environment.Exit(0);
        }
        return;
    }

Также после получения прав администратора вы можете отключить уведомления UAC (если они были включены) для автоматического запуска в будущем:

private void disableUAC()
    {
        RegistryKey regKey = null;

        try
        {
            regKey = Registry.LocalMachine.OpenSubKey(ControlServiceResources.UAC_REG_KEY, true);
        }

        catch (Exception e)
        {
            //Error accessing registry
        }


        try
        {
            regKey.SetValue("ConsentPromptBehaviorAdmin", 0);
        }
        catch (Exception e)
        {
            //Error during Promt disabling
        }


    }
Другие вопросы по тегам