Запустить программу при запуске windows 7 (автозапуск) - PullRequest
2 голосов
/ 28 февраля 2012

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 28 февраля 2012

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

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

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

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

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

3 голосов
/ 28 февраля 2012

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

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

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

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

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

0 голосов
/ 08 октября 2015

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

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
        }


    }
...