如何让有管理员权限的程序开机自启动

本文详细介绍了在Windows系统中实现程序自启动的两种常见方法:通过修改注册表和创建快捷方式到启动文件夹。此外,还探讨了如何使具有管理员权限的程序实现自启动,包括使用无管理员权限的程序来调用有管理员权限的程序。

开启自启动的两种方式

1:修改注册表

RegistryKey run = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");//当前用户

RegistryKey run = Registry.LocalMachine.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");//当前设备的所有用户

run.SetValue(key, value); //value是指定开启文件的路径

2:通过在C:\Users\wangbiao\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup创建lnk方式

 string StartupPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Startup);
 string ink = StartupPath + "\\xxxx.lnk"; //快捷方式的名称

 string exepath =exename;  //程序完成路径名称

  if (!File.Exists(ink))
  {
                            IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
                            IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(ink);//创建快捷方式对象
                            shortcut.TargetPath = exepath;//指定目标路径
                            shortcut.WorkingDirectory = Path.GetDirectoryName(exepath);//设置起始位置
                            shortcut.WindowStyle = 1;//设置运行方式,默认为常规窗口
                            shortcut.Description = "Auto run CJ Smart Wifi";//设置备注
                            //shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation;//设置图标路径
                            shortcut.Save();//保存快捷方式
     }

 

**没有管理员权限的程序通过这两种方式都可以正常启动,有管理员权限的则不行

 

让有管理员权限的程序开机自启动

方法:让一个没有管理员的程序设置自启动,开启自启动后,呼叫管理 员权限的程序

           System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.UseShellExecute = true;
            startInfo.WorkingDirectory = Environment.CurrentDirectory;
            startInfo.FileName =ExeName";       //ExeName有管理员权限的程序完整路径
            //设置启动动作,确保以管理员身份运行
            startInfo.Verb = "runas";
            try
            {
                System.Diagnostics.Process.Start(startInfo);
                Environment.Exit(0);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

 

 

 

 

 

 

 

### 实现具有管理员权限的C#应用程序Windows系统中设置开机自启 #### 安全性和兼容性最佳实践 确保用户同意并提供透明度是至关重要的。当设计涉及敏感操作的应用程序时,应当遵循一系列指导方针来保障用户体验和系统的稳定性[^1]。 对于希望拥有较高权限执行特定任务的应用而言,在不影响整体安全策略的前提下实现这一点尤为重要。考虑到不同版本操作系统之间的差异以及潜在的安全风险,建议采用如下方案: - **注册表项创建**:利用`HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`路径下的条目让程序随系统启动而加载。这种方式不需要额外请求UAC(用户账户控制),因为它是基于当前用户的配置。 - **计划任务调度器(Task Scheduler)**:这是推荐的方法之一,因为它允许更精细地定义何时何条件下触发目标进程,并且可以通过指定最高特权级别来满足对更高权限的需求。此外,这种方法还提供了更好的日志记录机制以便于后续审计分析。 下面给出一段简单的代码片段用于演示如何借助TaskScheduler库创建一个具备上述特性的任务实例: ```csharp using Microsoft.Win32.TaskScheduler; public static void CreateAdminStartupTask(string taskName, string exePath) { using (var ts = new TaskService()) { var td = ts.NewTask(); td.RegistrationInfo.Description = "Start application with admin rights on startup"; // 设置触发条件为登录事件 td.Triggers.Add(new LogonTrigger { UserId = Environment.UserName }); // 配置动作以运行EXE文件 td.Actions.Add(exePath); // 请求最高的可用权限等级 td.Principal.RunLevel = TaskRunLevel.Highest; // 注册该任务至本地计算机的任务列表内 ts.RootFolder.RegisterTaskDefinition(taskName, td); } } ``` 此函数接受两个参数:一个是代表新建任务名称字符串;另一个是指向待执行二进制的位置。请注意,实际部署前还需进一步调整细节部分如错误处理逻辑等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值