C# 实现winform软件最小化到系统托盘,开机自启动

C# 实现winform软件最小化到系统托盘,开机自启动

 

问题描述

  用户的电脑是win7系统,应用系统在用户电脑上运行时部分功能需要访问注册表,但是使用这些功能时会提示用户没有权限访问注册表。
原因分析

  win7及后续高版本系统对用户的权限控制比较严,就算用户的权限较高,但用户启动程序时默认还是以普通用户的权限启动,因此造成应用程序访问操作系统相关功能时受限。可以启动应用程序时选择已管理员身份运行,但是这样用户每次启动程序都不方便,而且有些用户也没有管理员权限。最好是应用系统启动时已用户的最大权限运行。
解决方案

  C#编写的WinForm程序可以通过配置文件方式设置程序启动时的运行权限。具体步骤如下:
  1.在Visual Studio解决方案资源管理器中的项目上点右键,选择添加->新建项。
在这里插入图片描述
  2.在添加新项窗口中选择应用程序清单文件,然后点击添加按钮。
在这里插入图片描述
  3.在项目中会新增一个app.manifest文件,双击打开改文件,其实是一个xml文件。其中的requestedExecutionLevel标签用于设置程序启动时的 运行权限,其值主要包括以下三个(参考文献中介绍的更为详细,可以查看参考文献1了解更多内容):

asInvoker:可以理解为以普通用户身份运行,详细的介绍请见参考文献1;
requireAdministrator:程序启动时需要当前用户具有管理员权限;
highestAvailable:以当前用户具有的最大权限运行。
在这里插入图片描述
在这里插入图片描述
  程序默认设置的为asInvoker,为了让用户能访问操作系统相关功能,可以将requestedExecutionLevel值设置为highestAvailable,这样应用系统就能以当前用户最大的权限运行了。

参考文献:
[1]应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果,https://walterlv.blog.csdn.net/article/details/89631840
————————————————
版权声明:本文为CSDN博主「gc_2299」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gc_2299/article/details/110503703

 

原文链接:https://www.cnblogs.com/zkwarrior/archive/2023/05/11/17390302.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 实现winform软件最小化到系统托盘,开机自启动 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月11日

相关文章

  • C# 表达式树Expression Trees的知识梳理

    下面是关于“C# 表达式树 Expression Trees的知识梳理”的攻略。 什么是表达式树? 表达式树是一种数据结构,用于表示代码中的表达式。在C#中,每个表达式都可以转换成一个表达式树。表达式树实际上是一个表达式的对象表示形式,其包含了表达式的所有元素,如运算符、操作数和子表达式。 为什么要使用表达式树? 表达式树有许多应用场景,其中最常见的用途是L…

    C# 2023年6月1日
    00
  • C# Path.GetFullPath(string path):获取指定路径的完整路径

    Path.GetFullPath(string path)是C#中的一个静态方法,用于将相对路径转换为绝对路径。具体来说,它根据指定的相对路径和当前工作目录,返回一个完全限定的绝对路径。 使用方法: string fullPath = Path.GetFullPath("relative/path.txt"); 其中参数relative/…

    C# 2023年4月19日
    00
  • 基于.NET中:自动将请求参数绑定到ASPX、ASHX和MVC的方法(菜鸟必看)

    基于.NET中:自动将请求参数绑定到ASPX、ASHX和MVC的方法(菜鸟必看) 1. 概述 当我们在Web开发中需要接收请求参数时,可以通过手动获取请求参数实现。但在.NET框架下,ASPX、ASHX和MVC框架中都提供了自动将请求参数绑定到对应的参数属性上的方法,本文将对此进行详细介绍。 2. 自动绑定参数 在.NET框架下,可以使用以下三种方式实现自动…

    C# 2023年5月31日
    00
  • C# Linq的Intersect()方法 – 返回两个序列的交集

    C# Linq Intersect()方法详解 Intersect()方法的定义 Intersect()方法是C# Linq方法之一,用于返回两个序列中共同出现的元素。该方法有两个重载版本,一个是无参数版本,返回两个序列中的重复元素,一个是带有另外一个序列作为参数的版本,返回两个序列中相同的元素。 无参数版本 无参数版本的Intersect()方法用于从两个…

    C# 2023年4月19日
    00
  • Docker大型项目容器化改造

    Docker大型项目容器化改造 Docker 是一种流行的容器化技术,可以将应用程序和其依赖项打包到一个容器中,以便在不同的环境中运行。本攻略将介绍如何将大型项目容器化改造,包括 Dockerfile 的编写、镜像的构建和容器的部署等步骤。 编写 Dockerfile Dockerfile 是用于构建 Docker 镜像的脚本文件,其中包含了构建镜像所需的所…

    C# 2023年5月17日
    00
  • ASP.NET设计网络硬盘之两重要类代码

    我可以为您提供关于“ASP.NET设计网络硬盘之两重要类代码”的完整攻略。 概述 在ASP.NET网络硬盘设计中,有两个重要的类可以帮助我们实现文件的上传、下载和管理功能。这两个类是FileUpload和Directory。 FileUpload类 FileUpload类是ASP.NET框架中的一个控件,用于上传文件到Web服务器。使用该控件可以轻松方便地实…

    C# 2023年5月31日
    00
  • 使用C#开发OPC Server服务器源码解析

    当您准备学习使用C#开发OPC Server服务器时,以下是完整攻略的步骤: 1. 确定OPC Server需要的功能 在开始编写代码前,需要先确定所需的OPC Server功能。例如,是否需要支持多个客户端连接、是否需要支持数据订阅和变化事件等。 2. 选择适合的OPC库 选择一款适合的OPC库很重要,因为它会影响到后续的代码编写和调试。自行编写OPC通信…

    C# 2023年6月6日
    00
  • c# 在Emit代码中如何await一个异步方法

    在 C# 中,可以通过使用 Emit 代码来动态生成 IL 字节码,实现类似于代码生成器或者 AOP 的功能。当我们需要在 Emit 代码中调用异步方法并且等待其完成时,需要按照以下步骤进行: Step 1: 定义异步委托 在 Emit 代码中调用异步方法,需要定义一个委托类型来表示异步方法的调用方式和返回值类型。例如,如果异步方法的返回值类型是 Task&…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部