尝试参考一篇文章来给自己的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);
}
}
}