前几天想做一个软件启动之前拦截的程序,找了下网上的资料没有找到合适的,突然看到电脑软件某看图软件,找到个思路就是跟他一样的,通过修改文件关联进行启动拦截。

原理是这样的,更改.exe默认的启动方式为我们的程序,也就是你运行程序是先进入我们的程序的,然后我们就可以对这个即将启动的软件进行审核,是否允许他运行。

然后软件的启动步骤会变成如下:运行电脑软件>启动我们的程序>程序判断审核是否允许启动>允许的话修改文件关联为系统默认的启动方式>启动该软件>重新修改文件关联为我们的程序>不允许则进行提示>结束。

当然,我这个程序是有些问题没解决的,具体请自行完善了,写得乱七八糟,不知道说得清不清楚,还是直接下载项目源码看就知道了。运行截图:

下面是部分代码。完整项目源码:http://files.cnblogs.com/files/tuzhiyuan/%E6%8B%A6%E6%88%AA%E5%99%A8%E8%BD%AF%E4%BB%B6.rar

1、修改文件关联的实现代码(网上找的,用法: setAssociatedFileType(".exe", "\"%1\" %*");这是改成系统默认的启动方式,我们要拦截他就修改启动方式为我们的程序,即:setAssociatedFileType(".exe", "\"" + Application.ExecutablePath + "\"" + " \"%1\"");其中的application.executablepath是获取当前程序的完整路径,详细用法看http://www.360doc.com/content/12/1013/18/7123232_241262664.shtml)

  1. private void setAssociatedFileType(string typeName, string app)
  2. {
  3.  
  4. string fileType = getTypeKeyName(typeName);
  5.  
  6. Registry.ClassesRoot.OpenSubKey(fileType + "\\shell\\open\\command", true).SetValue(null, app);
  7.  
  8. }
  9.  
  10. private string getAssociatedFileType(string typeName)
  11. {
  12.  
  13. string fileType = getTypeKeyName(typeName);
  14.  
  15. return (string)Registry.ClassesRoot.OpenSubKey(fileType + "\\shell\\open\\command").GetValue(null);
  16.  
  17. }
  18.  
  19. private string getTypeKeyName(string typeName)
  20. {
  21.  
  22. RegistryKey key = Registry.ClassesRoot.OpenSubKey(typeName);
  23.  
  24. return (string)key.GetValue(null);
  25.  
  26. }

  2.1、获取启动程序的文件路径,对此进行判断授权,修改Program.cs文件Main方法

  1. Application.EnableVisualStyles();
  2. Application.SetCompatibleTextRenderingDefault(false);
  3. if (args.Length != )
  4. {
  5. Form1 f = new Form1(args[]);
  6.  
  7. Application.Run(f);
  8. }
  9. else
  10. {
  11. //正常运行
  12. Application.Run(new Form1());
  13. }

 2.2、获取启动程序文件路径,对此进行判断授权,在我们程序的主窗口代码加上

  1. public Form1(string fileName)
  2. {
  3. InitializeComponent2();
  4.  
  5. string c = File.ReadAllText("d:\\config.txt");
  6. //MessageBox.Show(c);
  7. string FileNames = fileName.Substring(fileName.LastIndexOf("\\") + );//最后一个\后的数据
  8. FileNames = FileNames.Replace(".exe", "");
  9. if (FileNames == "拦截器软件")
  10. {
  11. setAssociatedFileType(".exe", "\"%1\" %*");
  12. System.Diagnostics.Process.Start(fileName);
  13. setAssociatedFileType(".exe", "\"" + Application.ExecutablePath + "\"" + " \"%1\"");
  14. this.Close();
  15. }
  16. else
  17. {
  18. if (c.ToLower().IndexOf(FileNames.ToLower()) != -)
  19. {
  20.  
  21. setAssociatedFileType(".exe", "\"%1\" %*");
  22. System.Diagnostics.Process.Start(fileName);
  23. setAssociatedFileType(".exe", "\"" + Application.ExecutablePath + "\"" + " \"%1\"");
  24. this.Close();
  25. }
  26. else
  27. {
  28. LanjieTip("未授权程序试图运行,已被拒绝!目标文件:" + fileName, fileName);
  29. this.Visible = false; //隐藏窗体
  30. this.Hide();
  31. this.Enabled = false;
  32. this.Opacity = ;
  33. // MessageBox.Show("未授权程序试图运行,已被拒绝!目标文件:" + fileName, "安全警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  34.  
  35. //this.Close();
  36. }
  37. }
  38.  
  39. }

c# WinForm软件启动拦截(通过更改文件关联实现)的更多相关文章

  1. Nginx优化之基本安全优化 (隐藏Nginx软件版本号信息,更改源码隐藏Nginx软件名及版本号,更改Nginx服务的默认用户)

    一,隐藏Nginx软件版本号信息 查看版本号 curl -I 192.168.0.220 HTTP/1.1 200 OK Server: nginx/1.6.2 #这里清晰的暴露了Web版本号(1.6 ...

  2. ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装

    1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...

  3. .net winform软件自动更新

    转载自 http://dotnet.chinaitlab.com/DotNetFramework/914178.html 关于.NET windows软件实现自动更新,本人今天写了一个DEMO,供大家 ...

  4. [转]如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  5. []如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  6. Mac 苹果OS X小技巧:如何更改文件的默认打开方式

    OS X小技巧:如何更改文件的默认打开方式 1.command + i 打开简介 2.选择合适的软件打开方式 3.选择全部更改 如图: 转自:http://digi.tech.qq.com/a/201 ...

  7. CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  8. 解决软件启动报error while loading shared libraries: libgd.so.2: cannot open shared object错误

    解决软件启动报error while loading shared libraries: libgd.so.2: cannot open shared object错误 今天安装启动nginx的时候报 ...

  9. 脱离开发软件启动Tomcat访问项目

    作为开发人员平时用的最多的就是通过开发软件启动Tomcat服务,从而访问项目.这样便于开发的bug调试 此处讲的是脱离开发软件启动Tomcat访问项目 链接参考: http://jingyan.bai ...

随机推荐

  1. django学习笔记【001】django版本的确定&创建一个django工程

    2.3 查看当前的django版本 python3. -m django --version 2.3.1 创建一个django工程 django-admin startproject mysite 在 ...

  2. javascript跨域訪问探索之旅

    需求:         近期工作负责一个互联网应用A(我公司应用)与还有一个互联网应用B进行通讯.通讯的方式是这种:还有一个互联网应用某些表单信息须要从我公司的互联网应用获取.首先用户訪问互联网应用B ...

  3. Unity向量投影使用

    官方例图 测试: code: public Transform point1; public Transform point2; public Transform humanPoint; public ...

  4. Atitit.atiJsBridge 新特性v7q329

    Atitit.atiJsBridge 新特性v7q329 atiJsBridge 未来计划 Postdata  图像上传的支持 Simp param计划 p1 p2 p3 p4 $method 的si ...

  5. Atitit.故障排除系列---NoClassDefFoundError  NoClassDefFoundError ClassNotFoundException

    Atitit.故障排除系列---NoClassDefFoundError  NoClassDefFoundError ClassNotFoundException 1. java.lang.Class ...

  6. 环境搭建基础知识2(sublime text3中配置verilog语法高亮)

    需求说明:Verilog设计 内容       :verilog开发环境搭建 来自       :时间的诗 1 软件下载 1.1 官方下载 地址http://www.sublimetext.com/3 ...

  7. 使用 OpCache 提升 PHP 性能

    使用 OpCache 提升 PHP 性能 wdd2007wdd2007 .6k 1月29日 发布 推荐 推荐 收藏 收藏,.3k 浏览 OpCache 通过对 opcode 的缓存和优化来提升 PHP ...

  8. hadoop集群的配置文件

    export JAVA_HOME=/home/hadoop/apps/jdk1..0_131 1.hadoop-env.sh中配置JAVA_HOME export HADOOP_YARN_USER=/ ...

  9. Chrome开发者工具之Network面板

    Chrome开发者工具面板 面板上包含了Elements面板.Console面板.Sources面板.Network面板. Timeline面板.Profiles面板.Application面板.Se ...

  10. Installing scipy on redhat with error “no lapack/blas resources found”

    这是更新scipy出现的结果,需要新版本的scipy,而机器上只装了0.7的版本,更新的时候报错,找到了一个解决方法: wget http://mirror.centos.org/centos/6/o ...