ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#应用开机自启

2022-05-23 02:31:35  阅读:175  来源: 互联网

标签:RegistryKey Run C# 自启 注册表 开机 run local


C# Winform打包部署时添加注册表信息实现开机自启动

 

1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下

2. 写入注册表的方式有两种

a.在生成安装程序时配置

b.在程序运行时,动态配置

方法一:使用VS2010自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件。具体实现如下:

1、添加安装部署项目后,鼠标右键安装项目->视图->注册表,HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中 添加键值保存软件目录。
    注意:默认的可能只有HKEY_CURRENT_USER\Software\[Manufacturer],没关系,我们依次添加以上的项即可,通过右键菜单新建"键",创建出如图所示的路径。即:HKEY_CURRENT_USER\Software\[Manufacturer]\Windows\CurrentVersion\Run。

2、然后在Run中添加字符串值,键名可以自己起,value要填软件的物理路径。
    物理路径是客户在部署确定的,我们如何获取呢?这里我们可以使用[TARGETDIR]获取客户选择的路径,在加上软件的启动文件名称。比如软件启动文件的名称是xx.exe,那么Value的值就为:[TARGETDIR]xx.exe。

这样,重启电脑系统就会自动运行我们设置的软件。 方法一本人亲测成功。 自启动成功后遇到的其他问题:安装后用鼠标点击打开可以正常运行,开机也可以自动启动,但是它读取配置文件数据(存在需要读取程序里面相关的配置文件)时出错,我关闭它用鼠标打开又可以正常运行  解决方法:开机时系统有很多内容没加载完全,软件就启动程序了,所以开机启动时不能找到那个配置文件。我直接将读取数据的路径改为 Application.StartupPath+配置文件路径就解决了 ,或者设置一个延时,延迟读取配置文件的时间。
public static string filePath = Application.StartupPath + @".\文件夹\文件名.bmp";//系统的filePath的路径

 

方法二:在程序运行时指定是否开机启动     在程序运行时,通过调用如下方法实现开机启动 复制代码
 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 选项。如图。   转载地址:https://blog.csdn.net/wangzl1163/article/details/75040615                  http://blog.csdn.net/liyc123youxiang/article/details/45870563

标签:RegistryKey,Run,C#,自启,注册表,开机,run,local
来源: https://www.cnblogs.com/ZQ-KK/p/16299813.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有