C#客户端(WinForm)开机自动启动实现
程序员文章站
2023-04-08 08:30:38
1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下 2. 写入注册表的方式有两种 a.在生成安装程序时配置 b.在程序运行时,动态配置。 方法一:VS2010打包过程中,在生成安装程序时配置 右击安装编辑程序,在“视图”菜单中,选择“注册表”。通过右键菜单新建"键",创 ......
1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下
2. 写入注册表的方式有两种
a.在生成安装程序时配置
b.在程序运行时,动态配置。
方法一:vs2010打包过程中,在生成安装程序时配置
右击安装编辑程序,在“视图”菜单中,选择“注册表”。通过右键菜单新建"键",创建出如图所示的路径。
右键run,新建“字符串值”。为右侧的key命名(在注册表中不能重名),并在属性中指定它的value值。
注:[targetdir]表示在程序的安装路径。
方法一本人亲测成功。
方法二:在程序运行时指定是否开机启动
在程序运行时,通过调用如下方法实现开机启动
1 /// <summary> 2 /// 修改程序在注册表中的键值 3 /// </summary> 4 /// <param name="isauto">true:开机启动,false:不开机自启</param> 5 public static void autostart(bool isauto) 6 { 7 try 8 { 9 if (isauto == true) 10 { 11 registrykey r_local = registry.localmachine;//registrykey r_local = registry.currentuser; 12 registrykey r_run = r_local.createsubkey(@"software\microsoft\windows\currentversion\run"); 13 r_run.setvalue("应用名称", application.executablepath); 14 r_run.close(); 15 r_local.close(); 16 } 17 else 18 { 19 registrykey r_local = registry.localmachine;//registrykey r_local = registry.currentuser; 20 registrykey r_run = r_local.createsubkey(@"software\microsoft\windows\currentversion\run"); 21 r_run.deletevalue("应用名称", false); 22 r_run.close(); 23 r_local.close(); 24 } 25 26 //globalvariant.instance.userconfig.autostart = isauto; 27 } 28 catch (exception) 29 { 30 //messageboxdlg dlg = new messageboxdlg(); 31 //dlg.initialdata("您需要管理员权限修改", "提示", messageboxbuttons.ok, messageboxdlgicon.error); 32 //dlg.showdialog(); 33 messagebox.show("您需要管理员权限修改", "提示"); 34 }
注:该程序的启动项设置到hkey_current_user 下,推荐。如果想改在hkey_local_machine,只需将currentuser改为localmachine,即
1 rkey = microsoft.win32.registry.localmachine.createsubkey("software\\microsoft\\windows\\currentversion\\run");
操作注册表有可能会需要程序有管理员权限,这时候就要在程序以管理员身份启动并运行。此时应进行以下操作。
1、在程序中添加程序清单文件。通过vs添加,右键项目选择添加选择新建项,选择程序清单。如下图。
2、设置uac 选项。如图。
转载地址: