参考文档:
https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee851671(v=msdn.10)?redirectedfrom=MSDN
建议方式:1.快捷方式,2.2CurrentUser注册表(测试代码见7、8章节)
当前用户:
C:\Users\lizj2\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
所有用户:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
优点:需要权限最小(生成快捷方式即可)
缺点:对于所有用户文件夹来说,需要管理员身份才能运行程序
优点:很多程序都是这么做的,
缺点:需要管理员权限才能设置注册表
注册表里32位程序,local_machine::
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
测试结果:32位机器无此项
注册表里64位程序,local_machine:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
注册表里64位\32位程序,current_user:
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
测试结果:不起作用
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit”
测试结果:可以启动
“HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
测试结果:无效,电脑启动不了
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run.
测试结果:无效
HKLM\System\CurrentControlSet\Control\Session Manager
测试结果:无效
测试结果:可以
组策略脚本:
/// <summary>
/// 自启动,注册表
/// </summary>
private static void AutoStartUseRegistryKey()
{
string appName = Process.GetCurrentProcess().MainModule.ModuleName;
string appPath = Process.GetCurrentProcess().MainModule.FileName;
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (key == null)
{
key = Registry.CurrentUser.CreateSubKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run");
}
key.SetValue("appName", appPath, RegistryValueKind.String);
key.Close();
}
/// <summary>
/// 自启动,启动目录,创建快捷方式
/// </summary>
static void AutoStartUseStartupFolder()
{
var startupFolder= Environment.GetFolderPath(Environment.SpecialFolder.Startup);
var appName = Process.GetCurrentProcess().ProcessName;
string shortcutPath = Path.Combine(startupFolder, $"{appName}.lnk"); //合成路径
WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath); //创建快捷方式对象
shortcut.TargetPath = Process.GetCurrentProcess().MainModule.FileName; //指定目标路径
shortcut.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory; //设置起始位置
shortcut.WindowStyle = 1; //设置运行方式,默认为常规窗口
shortcut.Description = ""; //设置备注
//shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation; //设置图标路径
shortcut.Save(); //保存快捷方式
}