开机自动启动程序

实现开机时程序性自动启动可行的方法一种方法是:在注册表中添加启动项。在.net中操作注册表要用到using Microsoft.Win32程序集中的RegistryKey类,关于此类的介绍详见http://msdn.microsoft.com/zh-cn/library/microsoft.win32.registrykey(v=vs.110).aspx

有了这个类我们就可以将我们的程序添加到SOFTWARE\MicroSoft\Windows\CurrentVersion\Run注册表子键中,方法代码如下:

<span style="font-family:Times New Roman;">        private static bool runWhenStart(bool started, string exeName, string path)
        {
            RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\MicroSoft\\Windows\\CurrentVersion\\Run", true);
            if(key == null)
            {
                key = Registry.CurrentUser.CreateSubKey("SOFTWARE\\MicroSoft\\Windows\\CurrentVersion\\Run");
            }
            if(started == true)
            {
                try
                {
                    key.SetValue(exeName,path);
                    key.Close();
                }
                catch
                {
                    return false;
                }
            }
            else
            {
                try
                {
                    key.DeleteValue(exeName,false);
                }
                catch
                {
                    return false;
                }
            }
            return true;
        }</span>


在WPF中,我们可以 创建一个选框,当鼠标点击选中时,就把该程序写入注册表项,选中的情况下再次点击,从注册表中移除该项:

<span style="font-family:Times New Roman;">        private void AutoStartApp_MouseDown(object sender, MouseButtonEventArgs e)
        {
            bool ret = false;
            string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
            str.Replace("\"", "");
            if (AutImage.Source.ToString().Contains("swich_off.png"))
            {
                AutImage.Source = new BitmapImage(new Uri("..\\resource\\swich_on.png", UriKind.RelativeOrAbsolute));
                IniFile.Instance.SetAutoStartFlag("Y");
                ret = runWhenStart(true, "Z.exe", str);
            }
            else
            {
                AutImage.Source = new BitmapImage(new Uri("..\\resource\\swich_off.png", UriKind.RelativeOrAbsolute));
                IniFile.Instance.SetAutoStartFlag("N");
                ret = runWhenStart(false, "Z.exe", str);
            }
        }</span>
但是,在win8和win7下通常会抛出一个“ 不允许所请求的注册表访问权”的异常,这是由于系统没有赋予我们注册表读写的权限。在此种情况下,我们需要对获得权限。这是需引用System.Security.Permissions程序集中的RegistryPermissionAttribute类,该类的详解见http://msdn.microsoft.com/zh-cn/library/system.security.permissions.registrypermissionattribute(v=vs.110).aspx

此时我们只需在命名空间前加入如下代码:

<span style="font-family:Times New Roman;">using System.Security.Permissions;
//[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, Read = @"HKEY_LOCAL_MACHINE\SOFTWARE")]
[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum, ViewAndModify = "SOFTWARE\\MicroSoft\\Windows\\CurrentVersion\\Run")]
namespace ZWPF.View</span>




<span style="font-size:14px;"><img src="file:///C:\Users\Ares\AppData\Roaming\Tencent\Users\175328955\QQ\WinTemp\RichOle\{E8]T_AC)%A_FZ50E@J%)V0.jpg" alt="" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" /></span>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值