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

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

 

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

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

我做的事情:

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

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

我创建了Windows服务项目

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

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

谢谢。

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

基本上我只创建了一个运行级别为Highest且触发器在Logon上的任务。

我在这个存储库中找到了vb中的代码: 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); } } } } } 

我在例如使用regedit.exe ,因为该程序需要管理员权限才能运行。

创建任务,进行注销并再次登录,登录后您将看到注册表处于打开状态。

OBS:要创建或删除任务,您已经以管理员身份运行visual studio,或者将此代码放在程序的安装过程中

如果这对某人有用,请告诉我