如何设置程序在启动时启动

Spi*_*dey 70 c# windows

我有一个小应用程序,CheckBox如果用户希望应用程序从Windows启动,用户可以设置该选项.

我的问题是如何实际设置应用程序在启动时运行.

ps:我正在使用C#和.NET 2.0.

Spi*_*dey 122

感谢大家的响应如此之快.Joel,我使用了你的选项2,并在当前用户的"Run"文件夹中添加了一个注册表项.这是我对其他任何感兴趣的人使用的代码.

    using Microsoft.Win32;
    private void SetStartup()
    {
        RegistryKey rk = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        if (chkStartUp.Checked)
            rk.SetValue(AppName, Application.ExecutablePath);
        else
            rk.DeleteValue(AppName,false);            

    }
Run Code Online (Sandbox Code Playgroud)

  • 我知道我迟到了,@ fernado Santiago但是他的复选框允许用户在启动时添加或删除程序. (5认同)
  • 什么是chkStartUp变量? (3认同)
  • 什么是'AppName`? (2认同)

Joe*_*orn 103

几个选项,按优先顺序排列:

  1. 将其添加到当前用户的Startup文件夹中.这需要您的应用程序运行的权限最少,并为用户提供最大程度的控制和反馈.不足之处是,确定下次他们在程序中查看该屏幕时是否显示已选中的复选框会有点困难.
  2. 将其添加到HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run注册表项.这里唯一的问题是它需要对注册表的写访问权限,这并不总是可用的.
  3. 创建在用户登录时触发的计划任务
  4. 将其添加到HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run注册表项.这里唯一的问题是它需要对注册表的写访问权限,这并不总是可用的.
  5. 将其设置为Windows服务.只有做到这一点,如果你真的意味着它,并且你肯定知道要运行这个程序的所有计算机上的用户.

这个答案现在比较老了.自从我写这篇文章以来,Windows 10发布了,它改变了开始菜单文件夹的工作方式......包括Startup文件夹.我还不清楚在没有引用Windows用于这些位置的内部数据库的情况下添加或删除该文件夹中的文件是多么容易.


Moh*_*MFa 7

这是一个如此简单的解决方案:

加上

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.SetValue("Your Application Name", Application.ExecutablePath);
Run Code Online (Sandbox Code Playgroud)

去除

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.DeleteValue("Your Application Name", false);
Run Code Online (Sandbox Code Playgroud)


小智 6

    /// <summary>
    /// Add application to Startup of windows
    /// </summary>
    /// <param name="appName"></param>
    /// <param name="path"></param>
    public static void AddStartup(string appName, string path)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.SetValue(appName, "\"" + path + "\"");
        }
    }

    /// <summary>
    /// Remove application from Startup of windows
    /// </summary>
    /// <param name="appName"></param>
    public static void RemoveStartup(string appName)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.DeleteValue(appName, false);
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

除了 Xepher Dotcom 的回答之外,Windows Startup 的文件夹路径应该这样编码:

var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
Run Code Online (Sandbox Code Playgroud)


Jon*_*ury 5

您可以在"HKCU\Software\Microsoft\Windows\CurrentVersion\Run"中创建一个注册表项,请注意它在Vista上可能会有所不同.由于UAC,您的设置可能会"虚拟化".


小智 5

这是将程序添加到Windows Vista 7、8、10启动的所有方法

  • 文件路径

C:\Users\Bureau Briffault\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (在任务管理器中可见,在当前用户登录成功时运行,无需管理员权限)

C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (从任务管理器中可见,在所有用户登录成功时运行,需要管理员权限)


  • 注册表路径

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (在任务管理器中可见,在当前用户登录成功时运行,无需管理员权限)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce (在任务管理器中不可见,在当前用户登录成功时运行,在登录时间内运行一次,不需要管理员权限)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run (从任务管理器中可见,在所有用户登录成功时运行,需要管理员权限)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce (在任务管理器中不可见,在所有用户登录成功时运行,在登录时间内运行一次,需要管理员权限)


  • 任务计划程序

Microsoft.Win32.Taskscheduler.dll (从任务管理器中不可见,在Windows引导上运行,以管理员身份运行,需要管理员权限)