C#中实现程序开机自启动 三种方式
2009-07-23 16:18
561 查看
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 }
现在系统服务启动应用程序的问题还在解决中.
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 }
现在系统服务启动应用程序的问题还在解决中.
相关文章推荐
- C#中实现程序开机自启动
- exe程序有几种方式实现开机自启动
- C#中实现程序开机自启动
- C# 将程序添加开机启动的三种方式
- Windows下通过写注册表的方式实现程序开机自启动
- C# “快捷方式” 实现程序开机启动
- Android程序开机自启动的实现方式
- C#接口的三种实现方式
- C#传值方式实现不同程序窗体间通信实例
- c#下实现程序开机自动启动
- c# list排序的三种实现方式
- c# list排序的三种实现方式
- C#CreateGraphics方法的三种实现方式
- C# 实现程序的开机启动
- windows7系统任务计划程序绕过UAC管理实现程序的开机自启动
- c#实现程序的开机启动
- 在symbian系统中实现程序自启动(开机和安装后)
- linux下三种开机自启动服务的方式总结
- C#实现面向对象多态性的三种方式
- C#实现启用、禁用本地网络的三种方式