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",,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("The path you want", "Restart.lnk"));
//有些目录下不允许建快捷方式
shortcut.TargetPath = System.IO.Path.Combine("Your exe file path", "Restart.vbs");
shortcut.WorkingDirectory = "The path you want";
shortcut.WindowStyle = ;
shortcut.Save();
File.Move(System.IO.Path.Combine("The path you want", "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");
C#中级-开机自动启动程序的更多相关文章
- C# 开机自动启动程序
原文:C# 开机自动启动程序 新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_Ch ...
- [Windows][VC]开机自动启动程序的几种方法
原文:[Windows][VC]开机自动启动程序的几种方法 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsof ...
- Ubuntu添加开机自动启动程序方法
1. 开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置 文件继续引导过程,启动其它进程.通常情况下,修改放置在 / ...
- VC++开机自动启动程序的几种方法 (转载)
转载:http://blog.csdn.net/zhazhiqiang/article/details/51909703 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能 ...
- Ubuntu添加开机自动启动程序的方法
文章出处:http://hi.baidu.com/gcc_gun/blog/item/fe9bbc4b84e911fa83025cb8.html 1. 开机启动时自动运行程序 Linux加载后, 它将 ...
- C#开机自动启动程序代码
新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_CheckedChanged(ob ...
- linux centos7开机自动启动程序实现
1存放脚本位置 /etc/init.d/ServerManagerCLI.sh 该脚本是自己新建的内容参看2 增加执行权限 chmod +x /etc/rc.d/init.d/ServerManage ...
- linux中将程序加入到开机自动启动
如果将在linux中将命令或者程序设置为开机自动启动,只需要进入到将对应命令加入到/etc/rc.d/rc.local文件里即可,如下 打开文件,vi /etc/rc.d/rc.local #!/bi ...
- C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)
#region//开机自动运行 private void CB_Auto_CheckedChanged(object sender, EventArgs e) {//CB_ ...
随机推荐
- 使用mybatis-generator在自动生成Model类和Mapper文件
使用mybatis-generator插件可以很轻松的实现mybatis的逆向工程,即,能通过表结构自动生成对应的java类及mapper文件,可以大大提高工作效率,并且它提供了很多自定义的设置可以应 ...
- VS15 preview 5打开文件夹自动生成slnx.VC.db SQLite库疑惑?求解答
用VS15 preview 5打开文件夹(详情查看博客http://www.cnblogs.com/zsy/p/5962242.html中配置),文件夹下多一个slnx.VC.db文件,如下图: 本文 ...
- redis成长之路——(一)
为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...
- bzoj1079--记忆化搜索
题目大意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得 ...
- 开发者最爱的Firebug停止更新和维护
近日,Firebug团队在其官网上宣布,Firebug将不再继续开发和维护,并邀请大家使用Firefox的内置开发工具. Firebug最初是2006年1月由Joe Hewitt编写, ...
- 微信公众号开发(一)--验证服务器地址的Java实现
现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...
- SAP CRM 将组件整合至导航栏中
到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...
- 编译器开发系列--Ocelot语言6.静态类型检查
关于"静态类型检查",想必使用C 或Java 的各位应该非常熟悉了.在此过程中将检查表达式的类型,发现类型不正确的操作时就会报错.例如结构体之间无法用+ 进行加法运算,指针和数值之 ...
- Outfit7 庆祝其开发工作大获丰收
走不寻常路之经验总结 每位合格应用开发人员都拥有相同的目标:灵机一动,构建独创性原型,克服各种困难,最终吸引投资者将其想法推向市场. 名声.财富以及构建更多应用的机会将接踵而至. 焦虑.改善和重复是开 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...