C#中级-开机自动启动程序

一、前言

关于C#开机自动启动程序的方法,网上出现比较多的是修改注册表:

1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run或者RunOnce

2.HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Run或者RunOnce

将你想要自动开机执行的程序的名称与路径写入该注册表就能实现开机自动启动,但是!这个方法是有问题的:

1. 微软自Vista之后对注册表的权限管理更加严格,需要一系列的权限操作,对注册表操作需要app.manifest文件:

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

并且操作注册表时还需要

Registry.LocalMachine.OpenSubKey(Yoursubkey,

RegistryKeyPermissionCheck.ReadWriteSubTree,System.Security.AccessControl.RegistryRights.FullControl);实现全部控制

2. 我在编写开机自动启动程序时也是先用修改注册表的方法,但是发现针对不同电脑不是每次都能成功的,也就是说修改注册表的方法的成功率并不是100%

二、一个古老而可靠的方法

其实有一个相当可靠而且实用的方法,那就是在计算机【开始/启动】文件夹中,将你想要开机自动启动的程序的快捷方式放入进去。这样下次开机就会执行这个文件夹的程序,

不要忘记 !如果不是每次开机都要执行这个程序的话,你应该在程序中有一个删除该快捷方式的语句。

下面是我的开机自动程序的组成部分:

1. 需要开机自动执行的程序                 Restart.exe

2. 一个引导执行Restart.exe的脚本      Restart.vbs

如果Restart.exe与.vbs 在客户机的任意一个硬盘上的任意一个位置,我的流程是:

1. 生成Restart.vbs的快捷方式Restart.lnk——>将.lnk剪切至【开始/启动】文件夹内

2. 当下次开机时会先通过快捷方式.lnk执行.vbs,再通过.vbs执行.exe

3. 当exe里的程序执行完之后,用File.Delete将.lnk删除(我可不想每次开机执行这个.lnk)

三、代码实现

     1. vbs脚本代码 (这个脚本必须和.exe在同一文件夹中)

Set shell =Wscript.createobject("WScript.Shell")
shell.Run "Restart.exe",0,False

2. 创建快捷方式的代码 (需要引入COM组件,名称为Windows Script Host Object Model)

 if (!File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\Restart.lnk"))
 {
     IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
     IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(System.IO.Path.Combine("Your exe file path", "Restart.lnk"));
     shortcut.TargetPath = System.IO.Path.Combine("Your exe file path", "Restart.vbs");
     shortcut.WorkingDirectory = "Your exe file path";
     shortcut.WindowStyle = 7;
     shortcut.Save();
     File.Move(System.IO.Path.Combine("Your exe file path", "Restart.lnk"), Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\Restart.lnk");
 }

      注意!最后一句!

File.Move的Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\Restart.lnk"

不能写成

      Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup),"Restart.lnk")

3. 执行完exe中的主要代码后,删除该快捷方式以防每次开机都执行这个程序(根据自已的需要)

File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\Restart.lnk");
时间: 2024-10-12 13:32:25

C#中级-开机自动启动程序的相关文章

C# 开机自动启动程序

原文:C# 开机自动启动程序 新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (checkBox1.Checked) //设置开机自启动 { MessageBox.Show ("设置开机自启动,需要修改注册表","提示"); string path = A

使用.bat批处理文件开机自动启动程序

我们不希望所有程序开机自动启动 , 因为我们有时需要一开机直接运行我们想使用的软件 , 却因为开机自启软件电脑开机速度被拖慢 , 我们有时候又需要开机自动启动 . 所以我教大家如何实现 . 首先关闭所有开机自启程序: win+x , t 运行task manager 在开机启动一栏, 关闭所有自启程序 下面 , 我们写一个.bat文件 , 以便随时自动启动程序 win+R,notepad , enter 输入以下代码 , 由于程序路径不同 , 你在使用时修改路径即可 , 对于最后一个启动项 ,

C#开机自动启动程序代码

新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (checkBox1.Checked) //设置开机自启动 { MessageBox.Show ("设置开机自启动,需要修改注册表","提示"); // hovertree.com string path =

OSX开机自动启动程序的控制脚本

一.Unix系统级别的启动脚本 /etc/mach_init.d/ /etc/mach_init_per_user.d/ /etc/mach_init_per_login_session.d/ 在这3个目录下面的启动脚本将在系统初始化阶段执行 二.OSX级别启动脚本 /System/Library/StartupItems/ ~/Library/StartupItems/ 三.OSX级别启动后台进程 /Library/LaunchAgents/ /Library/LaunchDaemons/ ~

java实现软件程序开机自动启动和创建程序的桌面快捷方式源代码

一.java实现.exe程序的开机自动启动 1.描述 自己在eclipse编写的java项目用exe4j Wizard打包成一个.exe可执行文件,并让用户可以开机自动启动. 2.步骤 1.   获得本软件中.exe可执行文件的路径 2.   在Windows系统中的开机启动栏存放该.exe可执行文件的快捷方式,即可实现开机自动启动. 3.代码 private void startFolderMethod() { String path = System.getProperty("user.di

VS2012+C语言+设置程序开机自动启动+示例

#include <stdio.h> #include <windows.h> #include <stdlib.h> char* ReplaceString(const char *srcStr, const char *src, const char *dest) //替换字符串,获得文件路径 { char *ptr; int len = strlen(srcStr); ptr = (char*)malloc(sizeof(char)*len+1); strcpy(

批处理+VBS+注册表实现开机自动启动EXE程序

批处理+VBS+注册表实现WINDOWS开机自动启动EXE程序 以下都是基于WINDOWS系统. 我们都知道当我们有想某个程序在开机时自动运行,只能有三个方式: 1.做成服务,然后对服务进行配置为自动启动(可以实现不进行用户登录完成): 2.做成驱动程序,随系统启动(可以实现不进行用户登录完成): 3.做成EXE程序,添加到开机启动项(必须得在用户登录情况下完成). 而我现在要解决的就是第三种情况 我有个想开机自动启动EXE的需求,而由于某些原因这个EXE短时间内无法做成服务,所以网上找了下方法

巧妙地利用进程分离来设置程序开机自动启动!(附源码)

在GG(高仿QQ)最早的版本中,我就加入了开机自动启动的功能,是通过操作注册表来实现的,但是操作注册表需要管理员权限,这样,就表示必须以管理员的身份来运行GG客户端.这对某些用户来说可能接受不了,因为以这么高的权限来运行一个程序,用户会觉得风险较大.而就从GG的角度来说,也只有在设置或取消开机启动才需要这个权限,而一开始就以管理员身份运行GG,就有点太夸张和浪费了. 一.方案进化 我开始想到的解决方案是,仍然以普通用户的身份启动GG,当需要操作注册表时,再提升至管理员权限.后来通过查资料了解到:

如何让程序开机自动启动

当我们在window下编写自己的程序时,也可以让自己编写的程序在电脑开机时自动运行,这主要是修改windows里的注册表信息,所有开机自动启动的程序的一些信息都放在注册表中的某一文件夹下.我们只需在特定的文件夹下写入我们的程序信息即可. 关于注册表  我们可以在键盘上同时按下 win+r 键,在运行串口中输regedit  回车即可看到注册表(可以理解为一个大树,记录着系统中的信息),我们点击左边文件夹,点击顺序为:Software\\Microsoft\\Windows\\CurrentVer