最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)軟件開機自啟動功能(不需要管理員權限)

 更新時間:2025年04月20日 10:30:07   作者:小碼編匠  
在本文中,我們探討了如何使用C#語言實現(xiàn)應用程序在系統(tǒng)啟動時自動運行的功能,同時避免了對管理員權限的需求,文章通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

原理簡介

本文參考C#實現(xiàn)軟件開機自動啟動的兩種常用方法,將里面中的第一種方法做了封裝成AutoStart類,使用時直接兩三行代碼就可以搞定。

自啟動的原理是將軟件的快捷方式創(chuàng)建到計算機的自動啟動目錄下(不需要管理員權限) ,這種方法更加通用、限制更少。

使用方法

使用方法如下:

//快捷方式的描述、名稱的默認值是當前的進程名,自啟動默認為正常窗口,一般情況下不需要手動設置
//設置快捷方式的描述,
AutoStart.Instance.QuickDescribe = "軟件描述";
//設置快捷方式的名稱
AutoStart.Instance.QuickName = "軟件名稱";
//設置自啟動的窗口類型,后臺服務類的軟件可以設置為最小窗口
AutoStart.Instance.WindowStyle = WshWindowStyle.WshMinimizedFocus;

//快捷方式設置true時,有就忽略、沒有就創(chuàng)建,自啟動快捷方式只能存在一個
//設置開機自啟動,true 自啟動,false 不自啟動
AutoStart.Instance.SetAutoStart(SysParam.Instance.OnOff);
//設置桌面快捷方式,true 創(chuàng)建桌面快捷方式(有就跳過,沒有就創(chuàng)建),false 刪除桌面快捷方式
AutoStart.Instance.SetDesktopQuick(true);

完整代碼

引用以下命名空間:

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

AutoStart類代碼:

public class AutoStart
{
    #region 公開

    /// <summary>
    /// 唯一實例,也可以自定義實例
    /// </summary>
    public static AutoStart Instance { get; private set; } = new AutoStart();

    /// <summary>
    /// 快捷方式描述,默認值是當前的進程名
    /// </summary>
    public string QuickDescribe { get; set; } = Process.GetCurrentProcess().ProcessName;

    /// <summary>
    /// 快捷方式名稱,默認值是當前的進程名
    /// </summary>
    public string QuickName { get; set; } = Process.GetCurrentProcess().ProcessName;

    /// <summary>
    /// 自啟動窗口類型,默認值是正常窗口
    /// </summary>
    public WshWindowStyle WindowStyle { get; set; } = WshWindowStyle.WshNormalFocus;

    /// <summary>
    /// 設置開機自動啟動-只需要調(diào)用改方法就可以了參數(shù)里面的bool變量是控制開機啟動的開關的,默認為開啟自啟啟動
    /// </summary>
    /// <param name="onOff">自啟開關</param>
    public void SetAutoStart(bool onOff = true)
    {
        if (onOff)//開機啟動
        {
            //獲取啟動路徑應用程序快捷方式的路徑集合
            List<string> shortcutPaths = GetQuickFromFolder(systemStartPath, appAllPath);
            //存在2個以快捷方式則保留一個快捷方式-避免重復多于
            if (shortcutPaths.Count >= 2)
            {
                for (int i = 1; i < shortcutPaths.Count; i++)
                {
                    DeleteFile(shortcutPaths[i]);
                }
            }
            else if (shortcutPaths.Count < 1)//不存在則創(chuàng)建快捷方式
            {
                CreateShortcut(systemStartPath, QuickName, appAllPath, QuickDescribe,WindowStyle);
            }
        }
        else//開機不啟動
        {
            //獲取啟動路徑應用程序快捷方式的路徑集合
            List<string> shortcutPaths = GetQuickFromFolder(systemStartPath, appAllPath);
            //存在快捷方式則遍歷全部刪除
            if (shortcutPaths.Count > 0)
            {
                for (int i = 0; i < shortcutPaths.Count; i++)
                {
                    DeleteFile(shortcutPaths[i]);
                }
            }
        }
        //創(chuàng)建桌面快捷方式-如果需要可以取消注釋
        //CreateDesktopQuick(desktopPath, QuickName, appAllPath);
    }

    /// <summary>
    /// 在桌面上創(chuàng)建快捷方式-如果需要可以調(diào)用
    /// </summary>
    public void SetDesktopQuick(bool isCreate)
    {
        string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
        List<string> shortcutPaths = GetQuickFromFolder(desktopPath, appAllPath);
        if (isCreate)
        {
            //沒有就創(chuàng)建
            if (shortcutPaths.Count < 1)
            {
                CreateShortcut(desktopPath, QuickName, appAllPath, QuickDescribe, WshWindowStyle.WshNormalFocus);
            }
        }
        else
        {
            //有就刪除
            for (int i = 0; i < shortcutPaths.Count; i++)
            {
                DeleteFile(shortcutPaths[i]);
            }
        }
    }
?
    #endregion 公開
?
    #region 私有
?
    /// <summary>
    /// 自動獲取系統(tǒng)自動啟動目錄
    /// </summary>
    private string systemStartPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
?
    /// <summary>
    /// 自動獲取程序完整路徑
    /// </summary>
    private string appAllPath = Process.GetCurrentProcess().MainModule.FileName;

    /// <summary>
    /// 自動獲取桌面目錄
    /// </summary>
    private string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

    /// <summary>
    ///  向目標路徑創(chuàng)建指定文件的快捷方式
    /// </summary>
    /// <param name="directory">目標目錄</param>
    /// <param name="shortcutName">快捷方式名字</param>
    /// <param name="targetPath">文件完全路徑</param>
    /// <param name="description">描述</param>
    /// <param name="iconLocation">圖標地址</param>
    /// <returns>成功或失敗</returns>
    private bool CreateShortcut(string directory, string shortcutName, string targetPath, string description, WshWindowStyle windowStyle, string iconLocation = null)
    {
        try
        {
            //目錄不存在則創(chuàng)建
            if (!Directory.Exists(directory)) Directory.CreateDirectory(directory);
            //合成路徑
            string shortcutPath = Path.Combine(directory, string.Format("{0}.lnk", shortcutName));
            //存在則不創(chuàng)建
            if (System.IO.File.Exists(shortcutPath)) return true;
            //添加引用 Com 中搜索 Windows Script Host Object Model
            WshShell shell = new IWshRuntimeLibrary.WshShell();
            //創(chuàng)建快捷方式對象
            IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath);
            //指定目標路徑
            shortcut.TargetPath = targetPath;
            //設置起始位置
            shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath);
            //設置運行方式,默認為常規(guī)窗口
            shortcut.WindowStyle = (int)windowStyle;
            //設置備注
            shortcut.Description = description;
            //設置圖標路徑
            shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation;
            //保存快捷方式
            shortcut.Save();
            return true;
        }
        catch (Exception ex)
        {
            string temp = ex.Message;
            temp = "";
        }
        return false;
    }

    /// <summary>
    /// 獲取指定文件夾下指定應用程序的快捷方式路徑集合
    /// </summary>
    /// <param name="directory">文件夾</param>
    /// <param name="targetPath">目標應用程序路徑</param>
    /// <returns>目標應用程序的快捷方式</returns>
    private List<string> GetQuickFromFolder(string directory, string targetPath)
    {
        List<string> tempStrs = new List<string>();
        tempStrs.Clear();
        string tempStr = null;
        string[] files = Directory.GetFiles(directory, "*.lnk");
        if (files == null || files.Length < 1)
        {
            return tempStrs;
        }
        for (int i = 0; i < files.Length; i++)
        {
            //files[i] = string.Format("{0}\{1}", directory, files[i]);
            tempStr = GetAppPathFromQuick(files[i]);
            if (tempStr == targetPath)
            {
                tempStrs.Add(files[i]);
            }
        }
        return tempStrs;
    }

    /// <summary>
    /// 獲取快捷方式的目標文件路徑-用于判斷是否已經(jīng)開啟了自動啟動
    /// </summary>
    /// <param name="shortcutPath"></param>
    /// <returns></returns>
    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 "";
        }
    }

    /// <summary>
    /// 根據(jù)路徑刪除文件-用于取消自啟時從計算機自啟目錄刪除程序的快捷方式
    /// </summary>
    /// <param name="path">路徑</param>
    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);
        }
    }
    #endregion 私有
}

總結

在本文中,我們探討了如何使用C#語言實現(xiàn)應用程序在系統(tǒng)啟動時自動運行的功能,同時避免了對管理員權限的需求。通過這種方法,用戶可以在不進行額外配置的情況下,確保應用程序隨系統(tǒng)啟動而自動加載,極大地提高了使用的便捷性和程序的可用性。

最后

到此這篇關于C#實現(xiàn)軟件開機自啟動功能(不需要管理員權限)的文章就介紹到這了,更多相關C#軟件開機自啟動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Avalonia封裝實現(xiàn)指定組件允許拖動的工具類

    Avalonia封裝實現(xiàn)指定組件允許拖動的工具類

    這篇文章主要為大家詳細介紹了Avalonia如何封裝實現(xiàn)指定組件允許拖動的工具類,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起來學習學習吧
    2023-03-03
  • 在winform中嵌入第三方軟件窗體的實踐分享

    在winform中嵌入第三方軟件窗體的實踐分享

    這篇文章主要介紹了在winform中如何嵌入第三方軟件窗體的實踐分享,文中通過代碼示例和圖文給大家介紹的非常詳細,具有一定參考價值,需要的朋友可以參考下
    2024-03-03
  • C#實現(xiàn)給圖片添加文字水印的示例代碼

    C#實現(xiàn)給圖片添加文字水印的示例代碼

    在某些應用項目中,查看電子圖片信息是經(jīng)常使用到的功能,此時我們就需要給顯示在瀏覽器中的圖片添加文字水印版權或提示信息,下面我們就來看看如何使用C#實現(xiàn)給圖片添加文字水印吧
    2024-04-04
  • C#獲取本機IP地址和Mac地址的方法

    C#獲取本機IP地址和Mac地址的方法

    這篇文章主要介紹了C#獲取本機IP地址和Mac地址的方法,實例分析了C#網(wǎng)絡功能的基本技巧,需要的朋友可以參考下
    2015-05-05
  • c#哈希算法的實現(xiàn)方法及思路

    c#哈希算法的實現(xiàn)方法及思路

    這篇文章主要介紹了c#哈希算法的實現(xiàn)方法及思路,有需要的朋友可以參考一下
    2013-12-12
  • C#使用LINQ查詢文件列表并找出最大文件

    C#使用LINQ查詢文件列表并找出最大文件

    在現(xiàn)代 C# 開發(fā)中,LINQ (Language Integrated Query) 提供了一種強大而優(yōu)雅的方式來處理集合數(shù)據(jù),本文將詳細介紹如何使用 LINQ 查詢文件系統(tǒng)中的文件,并找出最大的文件數(shù)量,需要的朋友可以參考下
    2024-10-10
  • C#如何在自定義事件里傳遞自定義數(shù)據(jù)

    C#如何在自定義事件里傳遞自定義數(shù)據(jù)

    相信很多小伙伴都知道傳值的一些方式,比如構造方法傳值,屬性傳值等,這篇文章主要來給大家分享的另一種方式,通過自定義事件來傳值,感興趣的可以了解下
    2024-12-12
  • 詳解WPF中值轉換器的使用方法

    詳解WPF中值轉換器的使用方法

    在WPF(Windows Presentation Foundation)中,值轉換器(Value Converter)是一種機制,允許你在綁定時轉換綁定源和綁定目標之間的值,本文給大家介紹了WPF中值轉換器的使用方法,需要的朋友可以參考下
    2024-02-02
  • C#實現(xiàn)輕松從HTML中提取純文本

    C#實現(xiàn)輕松從HTML中提取純文本

    這篇文章主要為大家詳細介紹了C#如何實現(xiàn)輕松從HTML中提取純文本,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • 如何在C#項目中鏈接一個文件夾下的所有文件詳解

    如何在C#項目中鏈接一個文件夾下的所有文件詳解

    很多時候我們需要獲取一個結構未知的文件夾下所有的文件或是指定類型的所有文件,下面這篇文章主要給大家介紹了關于如何在C#項目中鏈接一個文件夾下的所有文件,需要的朋友可以參考下
    2023-02-02

最新評論

马关县| 怀柔区| 凤城市| 鄯善县| 莱芜市| 莆田市| 庆元县| 广德县| 五华县| 台安县| 南郑县| 海南省| 井陉县| 惠安县| 汉沽区| 汉寿县| 类乌齐县| 太白县| 桐庐县| 澄城县| 合肥市| 上思县| 梁河县| 平远县| 荔波县| 怀安县| 太仓市| 如东县| 宝山区| 四子王旗| 蒙城县| 宝丰县| 尉氏县| 安义县| 伊川县| 含山县| 富裕县| 张北县| 二连浩特市| 乐陵市| 莱州市|