C#设置开机启动程序

尝试参考一篇文章来给自己的app添加开机启动的时候,发现参考的代码会遇到注册表权限的问题,程序调用调用开机启动的时候会提示:“对注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”的访问被拒绝。 ”搜索了一下,主要的原因是访问 HKEY_LOCAL_MACHINE 这一注册表分支需要管理员权限。不想一个简单的app去申请注册表权限,试了一下可以使用HKEY_CURRENT_USER 这一分支来达到同样的开机启动的效果。

修改后的代码如下:

private void 开机启动ToolStripMenuItem_Click(object sender, EventArgs e)
{
            if (开机启动ToolStripMenuItem.Checked)
            {
                开机启动ToolStripMenuItem.Checked = false;
                // MessageBox.Show("没有选中");
                //获取程序执行路径..
                string starupPath = Application.ExecutablePath;
                //class Micosoft.Win32.RegistryKey. 表示Window注册表中项级节点,此类是注册表装.
                RegistryKey loca = Registry.CurrentUser;
                RegistryKey run = loca.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");

                try
                {
                    //SetValue:存储值的名称
                    run.DeleteValue("proxydisable");
                    MessageBox.Show("已停止开机运行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    loca.Close();
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                开机启动ToolStripMenuItem.Checked = true;
                //获取程序执行路径..
                string starupPath = Application.ExecutablePath;
                //class Micosoft.Win32.RegistryKey. 表示Window注册表中项级节点,此类是注册表装.
                RegistryKey loca = Registry.CurrentUser;
                RegistryKey run = loca.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");

                try
                {
                    //SetValue:存储值的名称
                    run.SetValue("proxydisable", starupPath);
                    MessageBox.Show("已启用开机运行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    loca.Close();
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*

code

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据