一、前言

关于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#中级-开机自动启动程序的更多相关文章

  1. C# 开机自动启动程序

    原文:C# 开机自动启动程序 新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_Ch ...

  2. [Windows][VC]开机自动启动程序的几种方法

    原文:[Windows][VC]开机自动启动程序的几种方法 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsof ...

  3. Ubuntu添加开机自动启动程序方法

    1. 开机启动时自动运行程序  Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置    文件继续引导过程,启动其它进程.通常情况下,修改放置在      / ...

  4. VC++开机自动启动程序的几种方法 (转载)

    转载:http://blog.csdn.net/zhazhiqiang/article/details/51909703 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能 ...

  5. Ubuntu添加开机自动启动程序的方法

    文章出处:http://hi.baidu.com/gcc_gun/blog/item/fe9bbc4b84e911fa83025cb8.html 1. 开机启动时自动运行程序 Linux加载后, 它将 ...

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

    新建一个winform拖一个checkbox进来.. 然后设置它的changed事件. 已经测试过,可以直接复制使用. private void checkBox1_CheckedChanged(ob ...

  7. linux centos7开机自动启动程序实现

    1存放脚本位置 /etc/init.d/ServerManagerCLI.sh 该脚本是自己新建的内容参看2 增加执行权限 chmod +x /etc/rc.d/init.d/ServerManage ...

  8. linux中将程序加入到开机自动启动

    如果将在linux中将命令或者程序设置为开机自动启动,只需要进入到将对应命令加入到/etc/rc.d/rc.local文件里即可,如下 打开文件,vi /etc/rc.d/rc.local #!/bi ...

  9. C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)

    #region//开机自动运行        private void CB_Auto_CheckedChanged(object sender, EventArgs e)        {//CB_ ...

随机推荐

  1. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  2. Javascript实用方法二

    承接上一篇, Object keys object的keys方法能够获取一个给定对象的所有键(key/属性名)并以数组的形式返回.这个方法可以用于键的筛选.匹配等. var basket = { st ...

  3. EntityFramework.Extended 支持 MySql

    EntityFramework.Extended 默认不支持 MySql,需要配置如下代码: [DbConfigurationType(typeof(DbContextConfiguration))] ...

  4. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

  5. Spring resource bundle多语言,单引号format异常

    Spring resource bundle多语言,单引号format异常 前言 十一假期被通知出现大bug,然后发现是多语言翻译问题.法语中有很多单引号,单引号在format的时候出现无法匹配问题. ...

  6. 【夯实PHP基础】nginx php-fpm 输出php错误日志

    本文地址 原文地址 分享提纲: 1.概述 2.解决办法(解决nginx下php-fpm不记录php错误日志) 1. 概述 nginx是一个web服务器,因此nginx的access日志只有对访问页面的 ...

  7. Highcharts中国地图热力图

    最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...

  8. Android—自定义开关按钮实现

    我们在应用中经常看到一些选择开关状态的配置文件,做项目的时候用的是android的Switch控件,但是感觉好丑的样子………… 个人认为还是自定义的比较好,先上个效果图:

  9. Linux实战教学笔记07:Linux系统目录结构介绍

    第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...

  10. 跟Unity3D学代码优化

    今天我们来聊聊如何跟Unity学代码优化,准确地说,是通过学习Unity的IL2CPP技术的优化策略,应用到我们的日常逻辑开发中. 做过Unity开发的同学想必对IL2CPP都很清楚,简单地说,IL2 ...