浩康建站品牌

13518219792
  • 首页
  • 关于我们
    • 如何选择
    • 选择理由
  • 案例作品
    • 网站建设
    • 优化推广
    • 微信开发
    • 电商托管
  • 服务项目
    • 网站建设
    • 移动端/APP
    • 微信/小程序
    • 技术支持
    • 其它服务
  • 建站知识
    • 广西网站建设
    • 广西做网站
    • 广西网站设计
  • 网站售后
    • 广西网站运营
    • 广西网站维护
    • 广西网站推广
  • 客服中心
  • 全国分站

C#winform程序实现开机自启动并且识别是开机启动还是双击启动

开机启动程序,在很多场合都会用到,尤其是那种在后台运行的程序。

创新互联公司为您提适合企业的网站设计 让您的网站在搜索引擎具有高度排名,让您的网站具备超强的网络竞争力!结合企业自身,进行网站设计及把握,最后结合企业文化和具体宗旨等,才能创作出一份性化解决方案。从网站策划到成都做网站、网站建设、外贸营销网站建设, 我们的网页设计师为您提供的解决方案。

效果图:

C# winform程序实现开机自启动并且识别是开机启动还是双击启动

C# winform程序实现开机自启动并且识别是开机启动还是双击启动

以上两幅图都用到了命令行启动程序,为了模拟开机启动或者其他程序调用此程序。

第一幅图:程序启动可以根据不同参数,执行不同的操作。如果是双击启动,就自动运行逻辑代码,如果是带特定参数启动,就自动运行逻辑代码。

第二幅图:winform 程序设置开机启动,模拟双击启动和开机启动的不同效果。

开机启动并自动运行方法:其实思路很简单,就是将程序添加到注册表中,这设置值的时候,加一个参数就可以了。然后程序在入口函数处判断启动参数,如果有启动参数,就走自动运行逻辑代码,如果没有,就只是程序启动,并不运行逻辑代码。

【Main参数】

   在C/C++中,我们很明确的知道 main(int argc, char *argv[]/*, char *envp[]*/) 函数有两(三)个参数,第三个参数一般用得少,我是还没用到过。所以常见的都是用两个参数。第一个是参数个数,非负数。第二个是表示从执行环境传递给程序的各个实参。也就是说,我们要用程序入口参数,只需要判断argc的值,然后使用数组取argv的值就行。

那么到了C#就变的更简单了。直接变成 string[] 了。那么你只要遍历这个字符串数组就可以了。

C# winform程序实现开机自启动并且识别是开机启动还是双击启动

我们用VS创建命令行工程的时候,如果是命令行程序那么VS会默认使用带参数的main函数:void Main(string [] args);如果是winform工程,VS是默认使用void Main()。其实无论默认使用哪个都无所谓,主要是自己要清楚main函数的格式,以及代表的含义。main函数不光有参数,还可以有返回值。其实我们平时写的C#工程中main函数看似没有返回值,其实是可以带有int类型的返回值的。如果你不清楚这一块,传送门。

那如果我们用的是 void Main() 这种形式我们怎么获取程序入库参数?这里其实是只是一个表面现象。别以为你不带参数,我就获取不到了 ^_^ 。微软为我们提供了一个类:Environment。这个类比较强大。如果你还不清楚怎么用,那去 MSDN 搜一下就会了。获取命令行参数也就一个函数而已: string[] Environment.GetCommandLineArgs();使用这个方法需要注意就是返回值是数组类型,第一个元素包含正在执行的程序的文件名,从第二个参数开始,才是命令行参数。其实这个办法就刚好解决了 winform 程序中获取命令行参数的问题。

【注册表操作】

将程序启动写入注册表实现开机启动,这个感觉没什么好说的。使用固定方法操作就行。不过用有一点需要注意就是在访问注册表的时候可能会提示没有权限,你这个网上百度有好多方法。但是MSDN中也给出了方法。就是在工程的中添加应用程序文件清单中修改一句就可以了。

C# winform程序实现开机自启动并且识别是开机启动还是双击启动

核心代码:

using System;
using Microsoft.Win32;
namespace AutoStartRun
{
  public sealed class SystemHelper
  {
    private SystemHelper() { }
    /// 
    /// 设置程序开机启动
    /// 
    /// 应用程序exe所在文件夹
    /// 应用程序exe名称
    /// 自动运行状态
    public static void SetAutoRun(string strAppPath, string strAppName, bool bIsAutoRun)
    {
      try
      {
        if (string.IsNullOrWhiteSpace(strAppPath)
          || string.IsNullOrWhiteSpace(strAppName))
        {
          throw new Exception("应用程序路径或名称为空!");
        }
        RegistryKey reg = Registry.LocalMachine;
        RegistryKey run = reg.CreateSubKey(@"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\");
        if (bIsAutoRun)
        {
          run.SetValue(strAppName, strAppPath);
        }
        else
        {
          if (null != run.GetValue(strAppName))
          {
            run.DeleteValue(strAppName);
          }
        }
        run.Close();
        reg.Close();
      }
      catch (Exception ex)
      {
        throw new Exception(ex.Message, ex);
      }
    }
    /// 
    /// 判断是否开机启动
    /// 
    /// 应用程序路径
    /// 应用程序名称
    /// 
    public static bool IsAutoRun(string strAppPath, string strAppName)
    {
      try
      {
        RegistryKey reg = Registry.LocalMachine;
        RegistryKey software = reg.OpenSubKey(@"SOFTWARE");
        RegistryKey run = reg.OpenSubKey(@"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\");
        object key = run.GetValue(strAppName);
        software.Close();
        run.Close();
        if (null == key || !strAppPath.Equals(key.ToString()))
        {
          return false;
        }
        return true;
      }
      catch (Exception ex)
      {
        throw new Exception(ex.Message, ex);
      }
    }
  }
}

 调用方法:

 /// 
    /// 设置程序开机自启动
    /// 
    private void SetAutoRun()
    {
      string strFilePath = Application.ExecutablePath;
      string strFileName = System.IO.Path.GetFileName(strFilePath);
      try
      {
        SystemHelper.SetAutoRun(strFilePath + " -autostart", strFileName, !menuAutoRun.Checked);
        menuAutoRun.Checked = !menuAutoRun.Checked;
      }
      catch (Exception ex)
      {
        MessageBox.Show(this, ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
    }    

设置开机启动就是如此简单。

【开机启动并运行】

 那这个就不用说了,将命令行参数和开机注册表操作结合起来就可以了。

示例代码:       

/// 
    /// 检查是否开机启动,并设置控件状态
    /// 
    private void CheckAutoRun()
    { 
      string strFilePath = Application.ExecutablePath;
      string strFileName = System.IO.Path.GetFileName(strFilePath);
      if (SystemHelper.IsAutoRun(strFilePath + " -autostart", strFileName))
      {
        menuAutoRun.Checked = true;
      }
      else
      {
        menuAutoRun.Checked = false;
      }
    }
    private void AutoRun()
    {
      if (menuAutoRun.Checked)
      {
        string[] strArgs = Environment.GetCommandLineArgs();
        if (strArgs.Length >= 2 && strArgs[1].Equals("-autorun"))
        {
          labText.Text = "我是开机自启动运行...";
        }
      }
    }

总结

以上所述是小编给大家介绍的C# winform程序实现开机自启动并且识别是开机启动还是双击启动,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对创新互联网站的支持!


分享标题:C#winform程序实现开机自启动并且识别是开机启动还是双击启动
标题来源:http://gxwzsj.com/article/gjhddc.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

其他资讯

  • 在linux中删除文件的几种方法-创新互联
  • 空间和云服务器的区别是什么?
  • 怎么把oracle关闭 oracle 强制关闭
  • 查看linux内核命令 怎么查看linux内核
  • linux带宽监控命令 linux测带宽
  • jquery清空div内容,jquery清空html内容
  • 关于10windows系统的信息
  • c语言怎么显示两个函数 c语言怎么写两个函数
  • 为多个id添加css样式 css选择多个id
  • Linux双系统安装指南(双系统linux安装教程)

行业动态

企业网站建设的重要性!

现在虽然是移动互联网时代,但企业网站依然重要,包含PC站点,移动站。可以说企业网站关系企业的未来发展和前途,尤其对中小企业更是如此,一些中小企业老板,对自己的名片很在乎,因为这是个门面。...

服务项目

  • 网站建设

    查看详情
  • 移动端/APP

    查看详情
  • 微信/小程序

    查看详情
  • 技术支持

    查看详情
  • 其它服务

    查看详情
  • 更多服务项目

    用我们的专业和诚信赢得您的信赖,从PC到移动互联网均有您想要的服务!

    获取更多

联系吧 在百度地图上找到我们

电话:13518219792

如遇占线或暂未接听请拨:136xxx98888

业务咨询 技术咨询 售后服务
网站设计
广安网站设计
网站设计
成都网站设计
网站设计
网站制作
成都网站制作
盐亭网站制作公司
网站制作
手机网站制作
联系我们
电话:13518219792
邮箱:631063699@qq.com
地址:成都青羊区锦天国际1002号
网址:www.gxwzsj.com
网站建设
德阳网站建设
成都响应式网站建设
安防网站建设方案
高端品牌网站建设

微信二维码

  • 友情链接
  • 湖北摄影配件
  • 成都企业变更
  • 湖北咖啡机销售
  • 贝锐智能
  • 湖北家用电器公司
  • 成都会议展览设计
  • 成都汽油发电机
  • 成都航空货运
  • 成都人物雕塑
  • 眉山网站建设

Copyright © 2013-2025 www.gxwzsj.com 浩康建站品牌广西站 QQ:244261566 版权所有 备案号:蜀ICP备17025366号

  • 在线咨询
  • 13518219792
  • 微信二维码

  • 移动版官网