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

时间:2009-03-23 18:24:31

标签: c# windows

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

我的问题是如何将应用程序设置为在启动时运行。

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

13 个答案:

答案 0 :(得分:121)

感谢大家的响应如此之快。 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);            

    }

答案 1 :(得分:101)

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

  1. 将其添加到当前用户的Startup文件夹中。这需要您的应用程序运行的权限最少,并为用户提供最大程度的控制和反馈。不足之处是,确定下次他们在您的程序中查看该屏幕时是否显示已选中的复选框会更加困难。
  2. 将其添加到HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run注册表项。这里唯一的问题是它需要对注册表的写访问权限,这并不总是可用。
  3. 创建在用户登录时触发的计划任务
  4. 将其添加到HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run注册表项。这里唯一的问题是它需要对注册表的写访问权限,这并不总是可用。
  5. 将其设置为Windows服务。只有当真的意味着时才会这样做,您确定要为计算机上的所有用户运行此程序。
  6. 这个答案现在已经过时了。自从我写这篇文章以来,Windows 10发布了,它改变了开始菜单文件夹的工作方式......包括Startup文件夹。我还不清楚在不引用Windows用于这些位置的内部数据库的情况下,添加或删除该文件夹中的文件是多么容易。

答案 2 :(得分:10)

您需要设置一个注册表项,通常是安装程序。有关完整演练,请参阅http://www.windowsdevcenter.com/pub/a/oreilly/windows/ron/startup_0401.html

答案 3 :(得分:5)

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

答案 4 :(得分: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启动时运行,以管理员身份运行,需要管理员权限)

答案 5 :(得分:3)

如果应用程序设计为在Windows启动时启动(而不是用户登录时),则唯一的选择是涉及Windows服务。将应用程序编写为服务,或编写仅用于启动应用程序的简单服务。

编写服务可能很棘手,并且可能会施加对您的特定情况不可接受的限制。一种常见的设计模式是前端/后端对,具有完成工作的服务和与服务通信的应用程序前端,以向用户显示信息。

另一方面,如果您只想让您的应用程序以用户登录开始,您可以使用Joel Coehoorn列出的方法1或2。

答案 6 :(得分:2)

除了Xepher Dotcom的答案外,Windows Startup的文件夹路径还应采用以下方式编码:

var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);

答案 7 :(得分:1)

    /// <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);
        }
    }

答案 8 :(得分:1)

这是一个非常简单的解决方案:

要添加

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

要删除

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

答案 9 :(得分:0)

您可以使用Microsoft命名空间中的win32类

执行此操作
using Microsoft.Win32;

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
 {
            key.SetValue("aldwin", "\"" + Application.ExecutablePath + "\"");
 }

答案 10 :(得分:0)

我发现向启动文件夹添加快捷方式是我最简单的方法。我必须添加对“ Windows脚本宿主对象模型”和“ Microsoft.CSharp”的引用,然后使用此代码:

IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"\MyAppName.lnk";
System.Reflection.Assembly curAssembly = System.Reflection.Assembly.GetExecutingAssembly();

IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutAddress);
shortcut.Description = "My App Name";
shortcut.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
shortcut.TargetPath = curAssembly.Location;
shortcut.IconLocation = AppDomain.CurrentDomain.BaseDirectory + @"MyIconName.ico";
shortcut.Save();

答案 11 :(得分:0)

添加要在Windows 10启动时自动运行的应用程序

步骤1:选择Windows 开始按钮,然后滚动查找要在启动时运行的应用。

第2步:右键单击该应用,选择更多,然后选择打开文件位置。这将打开保存应用程序快捷方式的位置。如果没有打开文件位置选项,则表示该应用无法在启动时运行。

步骤3:在打开文件位置的情况下,按 Windows徽标键+ R ,键入 shell:startup ,然后选择 OK 。这将打开启动文件夹。

第4步:将快捷方式从文件位置复制并粘贴到启动文件夹。

答案 12 :(得分:0)

如果您使用 wpf,“ExecutablePath”将不起作用。所以我制作了一个也适用于 wpf 的代码。

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
    key.SetValue(
        "AutoStart.exe", 
        "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\""
    );
}