c# WinForm软件启动拦截(通过更改文件关联实现)
前几天想做一个软件启动之前拦截的程序,找了下网上的资料没有找到合适的,突然看到电脑软件某看图软件,找到个思路就是跟他一样的,通过修改文件关联进行启动拦截。
原理是这样的,更改.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)
private void setAssociatedFileType(string typeName, string app)
{ string fileType = getTypeKeyName(typeName); Registry.ClassesRoot.OpenSubKey(fileType + "\\shell\\open\\command", true).SetValue(null, app); } private string getAssociatedFileType(string typeName)
{ string fileType = getTypeKeyName(typeName); return (string)Registry.ClassesRoot.OpenSubKey(fileType + "\\shell\\open\\command").GetValue(null); } private string getTypeKeyName(string typeName)
{ RegistryKey key = Registry.ClassesRoot.OpenSubKey(typeName); return (string)key.GetValue(null); }
2.1、获取启动程序的文件路径,对此进行判断授权,修改Program.cs文件Main方法
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args.Length != )
{
Form1 f = new Form1(args[]); Application.Run(f);
}
else
{
//正常运行
Application.Run(new Form1());
}
2.2、获取启动程序文件路径,对此进行判断授权,在我们程序的主窗口代码加上
public Form1(string fileName)
{
InitializeComponent2(); string c = File.ReadAllText("d:\\config.txt");
//MessageBox.Show(c);
string FileNames = fileName.Substring(fileName.LastIndexOf("\\") + );//最后一个\后的数据
FileNames = FileNames.Replace(".exe", "");
if (FileNames == "拦截器软件")
{
setAssociatedFileType(".exe", "\"%1\" %*");
System.Diagnostics.Process.Start(fileName);
setAssociatedFileType(".exe", "\"" + Application.ExecutablePath + "\"" + " \"%1\"");
this.Close();
}
else
{
if (c.ToLower().IndexOf(FileNames.ToLower()) != -)
{ setAssociatedFileType(".exe", "\"%1\" %*");
System.Diagnostics.Process.Start(fileName);
setAssociatedFileType(".exe", "\"" + Application.ExecutablePath + "\"" + " \"%1\"");
this.Close();
}
else
{
LanjieTip("未授权程序试图运行,已被拒绝!目标文件:" + fileName, fileName);
this.Visible = false; //隐藏窗体
this.Hide();
this.Enabled = false;
this.Opacity = ;
// MessageBox.Show("未授权程序试图运行,已被拒绝!目标文件:" + fileName, "安全警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); //this.Close();
}
} }
c# WinForm软件启动拦截(通过更改文件关联实现)的更多相关文章
- Nginx优化之基本安全优化 (隐藏Nginx软件版本号信息,更改源码隐藏Nginx软件名及版本号,更改Nginx服务的默认用户)
一,隐藏Nginx软件版本号信息 查看版本号 curl -I 192.168.0.220 HTTP/1.1 200 OK Server: nginx/1.6.2 #这里清晰的暴露了Web版本号(1.6 ...
- ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装
1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...
- .net winform软件自动更新
转载自 http://dotnet.chinaitlab.com/DotNetFramework/914178.html 关于.NET windows软件实现自动更新,本人今天写了一个DEMO,供大家 ...
- [转]如何在Windows 10中更改文件夹背景颜色
ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...
- []如何在Windows 10中更改文件夹背景颜色
ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...
- Mac 苹果OS X小技巧:如何更改文件的默认打开方式
OS X小技巧:如何更改文件的默认打开方式 1.command + i 打开简介 2.选择合适的软件打开方式 3.选择全部更改 如图: 转自:http://digi.tech.qq.com/a/201 ...
- CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- 解决软件启动报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的时候报 ...
- 脱离开发软件启动Tomcat访问项目
作为开发人员平时用的最多的就是通过开发软件启动Tomcat服务,从而访问项目.这样便于开发的bug调试 此处讲的是脱离开发软件启动Tomcat访问项目 链接参考: http://jingyan.bai ...
随机推荐
- Top 10 Project Management Software
- Android 中查看内存的使用情况集经常使用adb命令
1. 在IDE中查看Log信息 当程序执行垃圾回收的时候,会打印一条Log信息.其格式例如以下: D/dalvikvm: <GC_Reason> <Amount_freed>, ...
- Java Annotations, Java Reflection, and Java Test Runner
www.vogella.com/tutorials/JavaAnnotations/article.html
- Java中的synthetic
有synthetic标记的field和method是class内部使用的,正常的源代码里不会出现synthetic field.小颖编译工具用的就是jad.所有反编译工具都不能保证完全正确地反编译cl ...
- 使用 OpCache 提升 PHP 性能
使用 OpCache 提升 PHP 性能 wdd2007wdd2007 .6k 1月29日 发布 推荐 推荐 收藏 收藏,.3k 浏览 OpCache 通过对 opcode 的缓存和优化来提升 PHP ...
- ecmall程序结构图与数据库表分析
以下是ecmall的程序结构图,看了这张图,我们可以清楚的知道ecmall的程序结构. ECMALL数据库主要表如下所示: ecm_acategory:存放的是商城的文章分类.ecm_address: ...
- 李洪强iOS开发之iOS工具收集
李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...
- linux系统的开机引导、启动流程
固件(CMOS/BIOS) > POST 加电自检 ↓ 自举程序(GRUB)> 加载内核 ↓ 载入内核 > 驱动硬件 ↓ 启动进程 init ↓ 读取执行配置文件/etc/initt ...
- PLS-00157: AUTHID only allowed on schema-level programs解决办法 包体的过程使用调用者权限方法
在包体里写了一个过程,test执行时报错,但是如果把该过程单独拿出来创建一个,就能顺利执行. 在没加上调用者权 authid current_user之前,报错如下 ORA-01031: insuf ...
- jQuery 实战读书笔记之第二章:选择元素
基本选择器 html 代码如下,后面的 js 使用的 html 基本大同小异. <!doctype html> <html> <head> <title> ...