我有一个带有CheckBox
选项的小应用程序,如果用户希望应用程序以Windows启动,则可以设置该选项。
我的问题是如何将应用程序设置为在启动时运行。
ps:我正在使用C#和.NET 2.0。
答案 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)
按优先顺序排列的几个选项:
HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run
注册表项。这里唯一的问题是它需要对注册表的写访问权限,这并不总是可用。HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run
注册表项。这里唯一的问题是它需要对注册表的写访问权限,这并不总是可用。这个答案现在已经过时了。自从我写这篇文章以来,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 + "\""
);
}