C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法

您所在的位置:网站首页 设置exe开机启动 C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法

C#/WPF/WinForm/程序实现软件开机自动启动的两种常用方法

2023-09-03 17:28| 来源: 网络整理| 查看: 265

方法一:将软件的快捷方式创建到计算机的自动启动目录下(不需要管理员权限) 1.必要引用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using IWshRuntimeLibrary; //添加引用,在 Com 中搜索 Windows Script Host Object Model using System.Diagnostics;

2.代码实现-只需要调用SetMeAutoStart(bool onOff)方法就可以了,参数onOff表示自启开关

/// /// 快捷方式名称-任意自定义 /// private const string QuickName = "TCNVMClient"; /// /// 自动获取系统自动启动目录 /// private string systemStartPath { get { return Environment.GetFolderPath(Environment.SpecialFolder.Startup); } } /// /// 自动获取程序完整路径 /// private string appAllPath { get { return Process.GetCurrentProcess().MainModule.FileName; } } /// /// 自动获取桌面目录 /// private string desktopPath { get { return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); } } /// /// 设置开机自动启动-只需要调用改方法就可以了参数里面的bool变量是控制开机启动的开关的,默认为开启自启启动 /// /// 自启开关 public void SetMeAutoStart(bool onOff = true) { if (onOff)//开机启动 { //获取启动路径应用程序快捷方式的路径集合 List shortcutPaths = GetQuickFromFolder(systemStartPath, appAllPath); //存在2个以快捷方式则保留一个快捷方式-避免重复多于 if (shortcutPaths.Count >= 2) { for (int i = 1; i CreateShortcut(systemStartPath, QuickName, appAllPath, "中吉售货机"); } } else//开机不启动 { //获取启动路径应用程序快捷方式的路径集合 List shortcutPaths = GetQuickFromFolder(systemStartPath, appAllPath); //存在快捷方式则遍历全部删除 if (shortcutPaths.Count > 0) { for (int i = 0; i try { if (!Directory.Exists(directory)) Directory.CreateDirectory(directory); //目录不存在则创建 //添加引用 Com 中搜索 Windows Script Host Object Model string shortcutPath = Path.Combine(directory, string.Format("{0}.lnk", shortcutName)); //合成路径 WshShell shell = new IWshRuntimeLibrary.WshShell(); IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath); //创建快捷方式对象 shortcut.TargetPath = targetPath; //指定目标路径 shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath); //设置起始位置 shortcut.WindowStyle = 1; //设置运行方式,默认为常规窗口 shortcut.Description = description; //设置备注 shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation; //设置图标路径 shortcut.Save(); //保存快捷方式 return true; } catch(Exception ex) { string temp = ex.Message; temp = ""; } return false; } /// /// 获取指定文件夹下指定应用程序的快捷方式路径集合 /// /// 文件夹 /// 目标应用程序路径 /// 目标应用程序的快捷方式 private List GetQuickFromFolder(string directory, string targetPath) { List tempStrs = new List(); tempStrs.Clear(); string tempStr = null; string[] files = Directory.GetFiles(directory, "*.lnk"); if (files == null || files.Length //files[i] = string.Format("{0}\\{1}", directory, files[i]); tempStr = GetAppPathFromQuick(files[i]); if (tempStr == targetPath) { tempStrs.Add(files[i]); } } return tempStrs; } /// /// 获取快捷方式的目标文件路径-用于判断是否已经开启了自动启动 /// /// /// private string GetAppPathFromQuick(string shortcutPath) { //快捷方式文件的路径 = @"d:\Test.lnk"; if (System.IO.File.Exists(shortcutPath)) { WshShell shell = new WshShell(); IWshShortcut shortct = (IWshShortcut)shell.CreateShortcut(shortcutPath); //快捷方式文件指向的路径.Text = 当前快捷方式文件IWshShortcut类.TargetPath; //快捷方式文件指向的目标目录.Text = 当前快捷方式文件IWshShortcut类.WorkingDirectory; return shortct.TargetPath; } else { return ""; } } /// /// 根据路径删除文件-用于取消自启时从计算机自启目录删除程序的快捷方式 /// /// 路径 private void DeleteFile(string path) { FileAttributes attr = System.IO. File.GetAttributes(path); if (attr == FileAttributes.Directory) { Directory.Delete(path, true); } else { System.IO.File.Delete(path); } } /// /// 在桌面上创建快捷方式-如果需要可以调用 /// /// 桌面地址 /// 应用路径 public void CreateDesktopQuick(string desktopPath = "", string quickName = "", string appPath = "") { List shortcutPaths = GetQuickFromFolder(desktopPath, appPath); //如果没有则创建 if (shortcutPaths.Count bool isOk = false; string appName = Process.GetCurrentProcess().MainModule.ModuleName; string appPath = Process.GetCurrentProcess().MainModule.FileName; isOk = SetAutoStart(onOff, appName, appPath); return isOk; } /// /// 将应用程序设为或不设为开机启动 /// /// 自启开关 /// 应用程序名 /// 应用程序完全路径 public static bool SetAutoStart(bool onOff, string appName, string appPath) { bool isOk = true; //如果从没有设为开机启动设置到要设为开机启动 if (!IsExistKey(appName) && onOff) { isOk = SelfRunning(onOff, appName, @appPath); } //如果从设为开机启动设置到不要设为开机启动 else if (IsExistKey(appName) && !onOff) { isOk = SelfRunning(onOff, appName, @appPath); } return isOk; } /// /// 判断注册键值对是否存在,即是否处于开机启动状态 /// /// 键值名 /// private static bool IsExistKey(string keyName) { try { bool _exist = false; RegistryKey local = Registry.LocalMachine; RegistryKey runs = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); if (runs == null) { RegistryKey key2 = local.CreateSubKey("SOFTWARE"); RegistryKey key3 = key2.CreateSubKey("Microsoft"); RegistryKey key4 = key3.CreateSubKey("Windows"); RegistryKey key5 = key4.CreateSubKey("CurrentVersion"); RegistryKey key6 = key5.CreateSubKey("Run"); runs = key6; } string[] runsName = runs.GetValueNames(); foreach (string strName in runsName) { if (strName.ToUpper() == keyName.ToUpper()) { _exist = true; return _exist; } } return _exist; } catch { return false; } } /// /// 写入或删除注册表键值对,即设为开机启动或开机不启动 /// /// 是否开机启动 /// 应用程序名 /// 应用程序路径带程序名 /// private static bool SelfRunning(bool isStart, string exeName, string path) { try { RegistryKey local = Registry.LocalMachine; RegistryKey key = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); if (key == null) { local.CreateSubKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run"); } //若开机自启动则添加键值对 if (isStart) { key.SetValue(exeName, path); key.Close(); } else//否则删除键值对 { string[] keyNames = key.GetValueNames(); foreach (string keyName in keyNames) { if (keyName.ToUpper() == exeName.ToUpper()) { key.DeleteValue(exeName); key.Close(); } } } } catch (Exception ex) { string ss = ex.Message; return false; //throw; } return true; }

实测稳定可用 参考链接:https://www.cnblogs.com/mq0036/p/12117955.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3