具有管理员权限的 Windows 窗体启动

2024-03-20

我有一个 Windows 窗体应用程序,需要管理员权限才能运行,为此,我使用以下代码:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

完成开发的下一步是在 Windows 重新启动、关闭并再次打开或用户登录后启动该 Windows 窗体应用程序。

这是我的问题,这个应用程序需要管理员权限,并且需要在系统启动后启动,但我不知道如何做到这一点。

我做了什么:

将应用程序可执行路径放在regedit上

Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

我创建了 Windows 服务项目

https://learn.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer https://learn.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer

这些选项不起作用,有人可以帮助我吗?

谢谢。


我找到了在启动时以管理员权限运行应用程序的答案。

基本上我只是创建了一个具有运行级别的任务Highest并且您的触发器是登录。

我在中找到了代码vb在此存储库中:https://bitbucket.org/trparky/start_program_at_startup_without_uac https://bitbucket.org/trparky/start_program_at_startup_without_uac

Sub addTask(taskName As String, taskDescription As String, taskEXEPath As String, taskParameters As String)
        taskName = taskName.Trim
        taskDescription = taskDescription.Trim
        taskEXEPath = taskEXEPath.Trim
        taskParameters = taskParameters.Trim

        If Not IO.File.Exists(taskEXEPath) Then
            MsgBox("Executable path not found.", MsgBoxStyle.Critical, Me.Text)
            Exit Sub
        End If

        Dim taskService As TaskService = New TaskService()
        Dim newTask As TaskDefinition = taskService.NewTask

        newTask.RegistrationInfo.Description = taskDescription

        If chkEnabled.Checked Then newTask.Triggers.Add(New LogonTrigger)

        Dim exeFileInfo As New FileInfo(taskEXEPath)

        newTask.Actions.Add(New ExecAction(Chr(34) & taskEXEPath & Chr(34), taskParameters, exeFileInfo.DirectoryName))

        newTask.Principal.RunLevel = TaskRunLevel.Highest
        newTask.Settings.Compatibility = TaskCompatibility.V2_1
        newTask.Settings.AllowDemandStart = True
        newTask.Settings.DisallowStartIfOnBatteries = False
        newTask.Settings.RunOnlyIfIdle = False
        newTask.Settings.StopIfGoingOnBatteries = False
        newTask.Settings.AllowHardTerminate = False
        newTask.Settings.UseUnifiedSchedulingEngine = True
        newTask.Settings.ExecutionTimeLimit = Nothing
        newTask.Settings.Priority = ProcessPriorityClass.Normal
        newTask.Principal.LogonType = TaskLogonType.InteractiveToken

        taskService.RootFolder.SubFolders(strTaskFolderName).RegisterTaskDefinition(taskName, newTask)

        newTask.Dispose()
        taskService.Dispose()
        newTask = Nothing
        taskService = Nothing
    End Sub

所以我所做的就是将此代码翻译为 C# 并进行测试

using Microsoft.Win32.TaskScheduler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CreateTaskTest
{
    class Program
    {
        static void Main(string[] args)
        {
            addTask();
            //deleteTask();
        }

        static void addTask()
        {
            // Get the service on the local machine
            using (TaskService ts = new TaskService())
            {
                // Create a new task definition and assign properties
                TaskDefinition newTask = ts.NewTask();
                newTask.RegistrationInfo.Description = "Rondinelli Morais Create Task";

                newTask.Triggers.Add(new LogonTrigger());

                newTask.Actions.Add(new ExecAction("C:\\Windows\\regedit.exe"));

                newTask.Principal.RunLevel = TaskRunLevel.Highest;
                newTask.Principal.LogonType = TaskLogonType.InteractiveToken;

                newTask.Settings.Compatibility = TaskCompatibility.V2_1;
                newTask.Settings.AllowDemandStart = true;
                newTask.Settings.DisallowStartIfOnBatteries = false;
                newTask.Settings.RunOnlyIfIdle = false;
                newTask.Settings.StopIfGoingOnBatteries = false;
                newTask.Settings.AllowHardTerminate = false;
                newTask.Settings.UseUnifiedSchedulingEngine = true;
                newTask.Settings.Priority = System.Diagnostics.ProcessPriorityClass.Normal;

                // Register the task in the root folder
                ts.RootFolder.RegisterTaskDefinition(@"Test", newTask);

                newTask.Dispose();
                ts.Dispose();
            }
        }

        static void deleteTask()
        {
            using (TaskService ts = new TaskService())
            {

                var tasks = ts.FindAllTasks(new System.Text.RegularExpressions.Regex(@"Test"));

                foreach(var task in tasks){
                    ts.RootFolder.DeleteTask(task.Name);
                }
            }
        }
    }
}

我在用着注册表编辑器例如,因为该程序需要管理员权限才能运行。

创建任务,注销并再次登录,登录后您将看到注册表编辑器打开。

OBS:要创建或删除任务,您必须以管理员身份运行 Visual Studio,或者将此代码放入程序的安装过程中

让我知道这是否对某人有用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有管理员权限的 Windows 窗体启动 的相关文章

随机推荐

  • 从“void*”到“unsigned char*”的转换无效

    我有以下代码 void buffer operator new 100 unsigned char etherhead buffer 尝试编译时 我收到该行的以下错误 error invalid conversion from void t
  • 上下移动 ListViewItems

    我有一个 ListView WinForms 我想通过单击按钮来上下移动项目 要移动的项目是已检查的项目 因此 如果选择了第 2 6 和 9 项 当我按下向上移动按钮时 它们将变为 1 5 和 8 并且这些位置上的项目将向下移动一步 我觉得
  • 基于标签的 SQL 查询

    我已经有一段时间没有做过任何 SQL 了 我不确定这个问题是否有一个简单的解决方案 我也有点菜鸟 我正在尝试构建一个图像库 允许用户使用标签来搜索图像 然后单击其他标签来优化搜索并减少结果数量 但我在所涉及的查询方面遇到了大问题 这是我当前
  • 从 firebase Swift 加载聊天

    我目前正在做一个聊天信使 我能够检索我发送给其他用户的所有消息 但无法检索他们发送的任何消息 我用来加载消息的代码是 func loadMsg let toId user id let fromId Auth auth currentUse
  • CMake 不再找到静态 Boost 库

    我正在开发一个依赖 Boost 的大型 C 项目 该项目使用 CMake 在各种平台上构建 在我的 Windows 计算机上 我使用 CMake 2 8 9 Visual Studio 2010 和 Boost 1 50 0 从源代码构建
  • 从 Openlayers 3 视口获取所有功能

    我试图找出 Openlayers 3 中图层上可见的所有功能 视口 如果我向地图添加点击事件 我可以找到一个功能 如下所示 但我无法找到视口中可见的所有功能 有人可以帮忙解决这个问题吗 map on click function evt v
  • 如何使用geodjango返回距某个点最近距离的记录?

    我正在使用 geodjango 并在我的数据库中有一个点的集合 为了获取某个区域内的点的查询集 我使用以下命令 queryset Spot objects filter point distance lte origin distance
  • Android 使用包含另一个 hashmap 的 hashmap 实现 Parcelable 对象

    这是一个扩展Android 实现具有 hashmap 的 Parcelable 对象 https stackoverflow com questions 22498746 android implement parcelable objec
  • XSS 背后的一般概念是什么?

    跨站脚本 XSS 是一种类型 计算机安全漏洞 通常出现在网络应用程序中 这使得恶意攻击者能够 将客户端脚本注入网络 其他用户查看的页面 一个 利用跨站点脚本 漏洞可被攻击者利用 绕过访问控制 例如 同源政策 跨站点 在网站上执行的脚本是 大
  • RXJava - 制作一个可暂停的可观察对象(例如带有缓冲区和窗口)

    我想创建执行以下操作的可观察对象 在暂停时缓冲所有项目 立即发出项目 同时它们不会暂停 暂停 恢复触发器必须来自另一个可观察的 必须保存它才能供不在主线程上运行的可观察对象使用 并且必须保存更改主线程的暂停 恢复状态 我想用一个Behavi
  • Android - Firebase - 我需要删除每个侦听器吗?

    我做了相当多的研究 但找不到我需要的答案 我所知道的是 当我将 ValueEventListener 附加到数据库引用时 我知道稍后需要将其删除 现在发现很难解决 因为存在大量内存泄漏 我不知道的是 我还需要分离所有其他侦听器吗 这包括 F
  • java.lang.RuntimeException:android.os.TransactionTooLargeException:在片段之间导航时数据包大小 558780 字节

    我在用Bundle在活动和片段之间传输数据 当我从一个片段导航到新片段时 不传输数据或使用Bundle为了获取数据 应用程序崩溃并出现以下错误 gt gt 10 09 11 36 09 100 467 467 E JavaBinder FA
  • FragmentStatePagerAdapter 处理 getItem() 位置

    我尝试了这个 但错误的列表被绑定到回收器视图 我也尝试过 SparseArray 即使这样也不起作用 当我启动 Mainactivity 时 getItem 被调用两次 退回的仓位如何处理 我尝试返回 viewpager currentIt
  • JavaScript 未定义替换为 null

    在 JavaScript 中undefined可以重新分配 因此通常建议创建一个自执行函数 以确保 undefined 实际上是未定义的 作为备选null and undefined肯定是 但任何其他值都大致相当于null undefine
  • 无法在主机上创建 node_modules 文件夹并将主机文件夹挂载到容器

    我的 dockerfile 将运行 npm install 但是之后docker compose build即使在看到构建后 我的主机文件夹中的文件夹 node modules 仍然为空 我怎样才能获得该文件夹并反映在主机中 这是 dock
  • 内容安全策略 (CSP) 如何运作?

    我在开发者控制台中收到一堆错误 拒绝评估字符串 拒绝执行内联脚本 因为它违反了以下内容安全策略指令 拒绝加载脚本 拒绝加载样式表 这是怎么回事 内容安全策略 CSP 如何运作 我该如何使用Content Security PolicyHTT
  • DataGridView 的 CellValueChanged 与 CellValidating 事件

    为 DataGridView 实现验证逻辑代码和条件格式代码的最佳位置是什么 在我读过的许多关于该控件的书籍和文章中 似乎表明处理该控件的适当事件是 CellValidating 事件 嗯 这个名字不仅仅意味着这一点 然而 根据我的口味 此
  • 为什么 PHP 中的函数 levenshtein 有 255 个字符的限制?

    有谁知道为什么这个功能编辑 http php net manual en function levenshtein phpPHP 有 255 个字符的限制吗 这是该函数的 PHP 完整实现 正如您所看到的 有基于字符串字符长度的嵌套循环 f
  • 如何用c++发一副牌

    我的要求如下 int Deal int CardSet CardSet 将两只手分成两手CardSet争论通过了 每手牌的数量是第一个参数 应一次从当前组中取出一张牌 将牌置于交替手中 例如 如果当前集合保持2S 3S 4S 5S 6S 7
  • 具有管理员权限的 Windows 窗体启动

    我有一个 Windows 窗体应用程序 需要管理员权限才能运行 为此 我使用以下代码