C#/WPF实现应用程序的自动启动

C#/WPF实现应用程序的自动启动

原理

在 Windows 上,启动文件夹是一个特殊的文件夹,其中包含了在操作系统启动时自动运行的程序和快捷方式。将应用程序的快捷方式放在系统的启动文件夹下,开机时,就会启动快捷方式指向的应用程序。

查看启动文件夹:

  1. 使用组合键 Win+R 打开 "运行" 对话框。或者,您也可以通过开始菜单中的搜索栏输入 "运行",然后选择 "运行" 应用程序。

  2. 在 "运行" 对话框中,输入以下路径并按下 Enter 键:

    Copy Codeshell:startup
    
  3. 可以看到我的启动文件夹在这里,里面有我正在开发的应用的快捷方式:

请注意,这种方法只适用于当前用户的启动文件夹。如果您希望打开全局启动文件夹(适用于所有用户),则需要使用不同的路径。全局启动文件夹的路径如下:shell:common startup

实现

using System;
using System.IO;

namespace Floai.Utils.View;

public static class AppAutoStarter
{
    // 获取自动启动快捷方式的文件路径
    public static string LnkFilePath
    {
        get
        {
            return Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.Startup),
                "Floai.lnk");
        }
    }

    // 禁用自动启动
    public static void DisableAutoStart()
    {
        if (File.Exists(LnkFilePath))
        {
            File.Delete(LnkFilePath);
        }
    }

    // 启用自动启动
    public static void EnableAutoStart()
    {
        var shellType = Type.GetTypeFromProgID("WScript.Shell");
        dynamic shell = Activator.CreateInstance(shellType);
        var shortcut = shell.CreateShortcut(LnkFilePath);
        shortcut.TargetPath = System.Windows.Forms.Application.ExecutablePath;
        shortcut.WorkingDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
        shortcut.Save();
    }
}

首先,我们定义了一个LnkFilePath属性。该属性使用Path.Combine()方法将特殊文件夹路径和快捷方式文件名组合起来,以获取自动启动快捷方式的完整文件路径。在这里,我们使用Environment.GetFolderPath(Environment.SpecialFolder.Startup)来获取Windows系统的启动文件夹路径,并将其与"Floai.lnk"文件名组合在一起,形成一个快捷方式文件的完整路径。

请注意,这种方法只适用于当前用户的启动文件夹。如果您希望打开全局启动文件夹(适用于所有用户),则需要使用不同的路径。全局启动文件夹的路径获取方式为Environment.SpecialFolder.CommonStartup

接下来,我们实现了DisableAutoStart()方法。该方法用于禁用自动启动功能。它首先检查自动启动快捷方式文件是否存在,如果存在,则使用File.Delete()方法将其删除。

然后,我们实现了EnableAutoStart()方法。该方法用于启用自动启动功能。首先,我们使用Type.GetTypeFromProgID()方法获取"WScript.Shell"类型的shellType。这是Windows脚本宿主对象模型(Windows Script Host Object Model)的一部分,它提供了创建和操作快捷方式的功能。

接下来,我们使用Activator.CreateInstance()方法创建了一个shell对象,该对象是shellType的实例。然后,我们使用shell.CreateShortcut()方法创建了一个快捷方式对象shortcut,并传入自动启动快捷方式的文件路径LnkFilePath

在创建的快捷方式对象上,我们设置了TargetPath属性为当前应用程序的可执行文件路径System.Windows.Forms.Application.ExecutablePath,这将指定自动启动时要运行的目标应用程序。然后,我们将WorkingDirectory属性设置为当前应用程序域的基本路径AppDomain.CurrentDomain.SetupInformation.ApplicationBase,这将指定程序的工作目录。最后,我们调用shortcut.Save()方法保存快捷方式。

这样,通过调用EnableAutoStart()方法,我们就能够创建一个快捷方式文件,并将其放置在Windows启动文件夹中。当操作系统启动时,该快捷方式将启动目标应用程序,实现自动启动的功能。

同样地,通过调用DisableAutoStart()方法,我们可以轻松地禁用自动启动功能,只需删除自动启动内的快捷方式。

posted @ 2023-07-06 02:20  汤问  阅读(407)  评论(0编辑  收藏  举报