c#设置开机自启动的2种方法实例

资源分享 同时被 2 个专栏收录
44 篇文章 0 订阅
88 篇文章 1 订阅

目的:生成快捷方式开机自启动

方法:生成快捷方式到系统启动目录下和注册表法

区别:后者可能会被安全软件拦截或提示,需要注册表修改权限等。

在Windows中创建快捷方式很简单,直接用右键点击文件或文件夹,选择创建快捷方式即可。如果想用C#代码的方式创建,就没有那么方便了,因为.NET框架没有提供直接创建快捷方式的方法。

  首先我们看一下快捷方式是什么。对快捷方式点右键,选择属性菜单,在弹出的属性对话框的常规Tab中可以看到,文件类型是快捷方式(.lnk),所以快捷方式本质上是lnk文件。

  • 名称:在图标后面的文本,该快捷方式的文件名称
  • 目标类型:该快捷方式指向目标的类型
  • 目标位置:该快捷方式指向目标的上级文件夹名称
  • 目标:该快捷方式指向目标的完整路径。
  • 起始位置:该快捷方式指向目标的上级文件夹完整路径。
  • 快捷键:可设定快捷键打开该快捷方式,快捷键是Ctrl、Alt、Shift和字母键的组合。
  • 运行方式:通过该快捷方式打开目标之后运行的窗口大小。
  • 备注:对该快捷方式的备注信息,当鼠标停留在快捷方式上时会显示。
  • 使用C#创建快捷方式就是要创建一个lnk文件,并设置相关的属性。.NET框架本身是没有提供方法的,需要引入IWshRuntimeLibrary。在添加引用对话框中搜索Windows Script Host Object Model,选择之后添加到Project的引用中。如果需要获取快捷方式的属性,可以调用WshShell对象的CreateShortcut方法,传入完整的快捷方式文件路径即可得到已有快捷方式的IWshShortcut实体。修改快捷方式的属性,则修改IWshShortcut实体的属性,然后调用Save方法即可。using Microsoft.CSharp;//引用框架下的 Microsoft.CSharp (否则提示 缺少编译器要求的成员 Microsoft.CSharp.RuntimeBinder.Binder.Convert);

准备:

1)生成类及应用注意事项

   /// <summary>
    /// 创建快捷方式的类
    /// </summary>
    /// <remarks></remarks>
    public class ShortcutCreator
    {
        //需要引入IWshRuntimeLibrary,(COM 类型库)搜索Windows Script Host Object Model

        /// <summary>
        /// 创建快捷方式 using IWshRuntimeLibrary;
        /// </summary>
        /// <param name="directory">快捷方式所处的文件夹</param>
        /// <param name="shortcutName">快捷方式名称</param>
        /// <param name="targetPath">目标路径</param>
        /// <param name="description">描述</param>
        /// <param name="iconLocation">图标路径,格式为"可执行文件或DLL路径, 图标编号",
        /// 例如System.Environment.SystemDirectory + "\\" + "shell32.dll, 165"</param>
        /// <remarks></remarks>
        public static void CreateShortcut(string directory, string shortcutName, string targetPath,
            string description = null, string iconLocation = null)
        {
            if (!System.IO.Directory.Exists(directory))
            {
                System.IO.Directory.CreateDirectory(directory);
            }

            string shortcutPath = Path.Combine(directory, string.Format("{0}.lnk", shortcutName));
            WshShell shell = new WshShell();
            IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);//创建快捷方式对象(必须 引用框架下的 Microsoft.CSharp)
            shortcut.TargetPath = targetPath;//指定目标路径
            shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath);//设置起始位置
            shortcut.WindowStyle = 1;//设置运行方式,默认为常规窗口
            shortcut.Description = description;//设置备注
            shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation;//设置图标路径
            shortcut.Save();//保存快捷方式
        }

        /// <summary>
        /// 创建桌面快捷方式
        /// </summary>
        /// <param name="shortcutName">快捷方式名称</param>
        /// <param name="targetPath">目标路径</param>
        /// <param name="description">描述</param>
        /// <param name="iconLocation">图标路径,格式为"可执行文件或DLL路径, 图标编号"</param>
        /// <remarks></remarks>
        public static void CreateShortcutOnDesktop(string shortcutName, string targetPath,
            string description = null, string iconLocation = null)
        {
            string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//获取桌面文件夹路径
            CreateShortcut(desktop, shortcutName, targetPath, description, iconLocation);
        }
    }

注意事项:必须引用2个dll否则会提示问题

using IWshRuntimeLibrary;//需要引入IWshRuntimeLibrary。在添加引用对话框中搜索(COM>>类型库)Windows Script Host Object Model,选择之后添加到Project的引用中。
using Microsoft.CSharp;//Microsoft.CSharp 否则会提示 缺少编译器要求的成员 Microsoft.CSharp.RuntimeBinder.Binder.Convert

2)知识点:

如何获取文件名称和不带扩展名的文件名

                string filename = Application.ExecutablePath.Substring(Application.StartupPath.Length + 1);//去斜杠和路径,文件名带扩展名
                string truefilename = getExeName(true);//不带扩展名的文件名

filename带扩展名的文件名

truefilename不带扩展名的文件名

注意load里判断下 是否存在快捷,存在就选中菜单(仅判断方法1,方法2自行修改判断存在就选中)

                    string path = Application.ExecutablePath;//路径
                    RegistryKey rk = Registry.LocalMachine;
                    RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");

                    var isexist=rk2.GetValue(filename);//开机检测可以这么读取
if(isexist!=null)就说明存在了
                    rk2.Close();
                    rk.Close();

如果不想这么麻烦,就生成的时候判断下是否存在即可。(9i物联网浏览器介绍 https://blog.csdn.net/uaime/article/details/117172156?spm=1001.2014.3001.5501

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值