c#实现程序的开机启动大致有两种方法,就是写入注册表或者采用服务程序,最近一直研究着用C#来操作注册表,下面介绍的方法便是用注册表来实现程序随开机启动。

关键代码很短,如下:

 

前提要引入命名空间 using Microsoft.Win32;

RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);//打开注册表子项

key.SetValue(程序的名称, 程序的路径);//设置为开机启动

为了安全性,还应该判断设置的文件是否存在以及该子项是否存在,所有完整代码如下:

 

 


using Microsoft.Win32;

private void btnShowOpen_Click(object
 sender, EventArgs e)
        
{
            OpenFileDialog open 
= new
 OpenFileDialog();
            open.Filter 
= "可执行文件(*.exe)|*.exe"
;
            
if (open.ShowDialog() ==
 DialogResult.OK)
            
{
                txtPath.Text 
=
 open.FileName;
            }

        }


        
private bool runWhenStart(bool started,string exeName, string path)
        
{           
            RegistryKey key 
= Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"true);//打开注册表子项

            if (key == null)//如果该项不存在的话,则创建该子项
            {
                key 
= Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
);
            }

            
if (started == true)
            
{
                
try

                
{                    
                    key.SetValue(exeName, path);
//设置为开机启动

                    key.Close();
                }

                
catch
                
{
                    
return false
;
                }

            }

            
else
            
{
                
try

                
{                    
                    key.DeleteValue(exeName);
//取消开机启动

                    key.Close();
                }

                
catch
                
{
                    
return false
;
                }

            }

            
return true;
        }


        
private void btnSet_Click(object sender, EventArgs e)
        
{
            
if (txtPath.Text == "")//检查是否选择了文件

            {
                MessageBox.Show(
"请选择要随计算机一起启动的程序路径!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtPath.Focus();
                
return
;
            }
            
            
string path =
 txtPath.Text.Trim();
            
string exeName = path.Substring(path.LastIndexOf("\\"+ 1
);
            
if (!File.Exists(path))//检查该文件是否存在

            {
                MessageBox.Show(
"文件不存在!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtPath.Text 
= ""
;
                txtPath.Focus();
                
return
;
            }

            
if (runWhenStart(true,exeName, path))
            
{
                MessageBox.Show(
"设置成功!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            
else
            
{
                MessageBox.Show(
"设置失败!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }


        
private void btnCancel_Click(object sender, EventArgs e)
        
{
            
if (txtPath.Text == "")//检查是否选择了文件

            {
                MessageBox.Show(
"请选择要撤销随计算机一起启动的程序路径!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtPath.Focus();
                
return
;
            }

            
string path = txtPath.Text.Trim();
            
string exeName = path.Substring(path.LastIndexOf("\\"+ 1
);
            
if (!File.Exists(path))//检查该文件是否存在

            {
                MessageBox.Show(
"文件不存在!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtPath.Text 
= ""
;
                txtPath.Focus();
                
return
;
            }

            
if (runWhenStart(false, exeName, path))
            
{
                MessageBox.Show(
"撤销成功!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            
else
            
{
                MessageBox.Show(
"撤销失败!""消息"
, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

posted on 2009-06-10 14:53  8user  阅读(698)  评论(0编辑  收藏  举报