C#中实现程序开机自启动

需求:公司话务系统,要求加上开机自启动功能

实现:

1、首先想到写注册表,关键代码如下:

 

 1 public   void  RunWhenStart( bool  Started,  string  name,  string  path)
 2          {
 3            RegistryKey HKLM = Registry.LocalMachine;
 4            RegistryKey Run = HKLM.CreateSubKey(@"SOFTWARE//Microsoft//Windows//CurrentVersion//Run/");
 5            if (Started == true)
 6            {
 7                try
 8                {
 9                    Run.SetValue(name, path);
10                    HKLM.Close();
11                }

12                catch (Exception)
13                {
14                    MessageBox.Show("注册表修改错误(开机自启未实现)");
15                }

16            }

17            else
18            {
19                try
20                {
21                    if (Run.GetValue(name) != null)
22                    {
23                        Run.DeleteValue(name);
24                        HKLM.Close();
25                    }

26                    else
27                        return;
28                }

29                catch (Exception e)
30                {
31                    ExceptionTransact.WriteErrLog(base.GetType().Name, e.Message);
32                    // 
33                }

34            }

35        }

用了一段时间后,发现问题出来了:公司市场部的电脑,用户没有写注册表的权限,所以此功能无效,只能另想办法。

本来考虑写一个系统服务,由系统服务启动话务系统,不过在实现中遇到了问题:话务系统单独启动没有问题,由系统服务启动时在Application.Run(new MainForm());处一直报空引用错误,而调试中new MainForm()并不为空。由于此问题无法解决,无奈之下改用其它办法。

2、桌面生成快捷方式,然后把快捷方式复制到用户启动文件夹:

 

 1  public   static   void  Main()
 2          {
 3              WshShell shell  =   new  WshShell();
 4               // 创建可执行文件快捷方式到桌面
 5              IWshShortcut shortcut  =  (IWshShortcut)shell.CreateShortcut(
 6              Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)  +
 7               " // "   +   " XX话务系统客户端.lnk "
 8              );
 9              shortcut.TargetPath  =  System.Reflection.Assembly.GetExecutingAssembly().Location;
10              shortcut.WorkingDirectory  =  System.Environment.CurrentDirectory;
11              shortcut.WindowStyle  =   1 ;
12              shortcut.Description  =   " XX话务系统客户端 " ;
13              shortcut.IconLocation  =  System.Environment.CurrentDirectory  +   " // "   +   " phone9.ico " ;
14              shortcut.Save();
15              Application.EnableVisualStyles();
16              Application.SetCompatibleTextRenderingDefault( false );
17               //  get the name of our process
18              MainForm mf  =   new  MainForm();
19               string  proc  =  Process.GetCurrentProcess().ProcessName;
20               //  get the list of all processes by that name
21              Process[] processes  =  Process.GetProcessesByName(proc);
22               //  if there is more than one process
23               if  (processes.Length  >   1 )
24              {
25                  MessageBox.Show( " 程序已经运行! " );
26                   return ;
27              }
28               else
29                  Application.Run(mf);
30          }

 

 1  private   void  checkBox1_CheckedChanged( object  sender, EventArgs e)
 2          {
 3               // 获取当前系统用户启动目录
 4               string  StartupPath  =  System.Environment.GetFolderPath(System.Environment.SpecialFolder.Startup);
 5               // 获取当前系统用户桌面目录
 6               string  desktopPath  =  System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
 7               if  (checkBox1.Checked)
 8              {
 9                   // 获取可执行文件快捷方式的全部路径
10                   string  exeDir  =  desktopPath  +   " //XX话务系统客户端.lnk " ;
11                   // 把程序快捷方式复制到启动目录
12                  System.IO.File.Copy(exeDir, StartupPath  +   " //XX话务系统客户端.lnk " true );
13              }
14               // RunWhenStart(true, Application.ProductName, Application.StartupPath + @"/XX话务系统客户端.exe");
15               else
16              {
17                  System.IO.File.Delete(StartupPath  +   " //XX话务系统客户端.lnk " );
18              }
19                   // RunWhenStart(false, Application.ProductName, Application.StartupPath + @"/XX话务系统客户端.exe");
20          }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值