不知道有没有这样一个需求:有个.xml文件,想要用notepad++打开,然而我的notepad++是绿色免安装版,所以注册表没有把这个功能添加到鼠标右键,所以右键点击这个文件时没有(使用notepad++打开)的选项;
发现了更好用的player用来打开.MP4文件;
想要用特定的软件打开特定后缀名的文件。
之前想学习一些源码,于是想反编译.dll来看看源码是如何实现的。下了个ILSpy来查阅的时候,发现要先打开ILSpy,再把这个.dll文件拖入其中,或者使用ILSpy窗体里的"文件->打开"来打开指定的dll,这个操作是不是比较繁琐又慢人一步。
===========================非开发者可以跳过中间这段,直接看工具怎么使用和下载链接===========================
我们C#的控制台程序里,入口函数中
static void Main(string[] args)
{
var path = args.FirstOrDefault();
Console.WriteLine(path);
}
这个args里面其实包含了一些可传入参数。如果你拖入一个文件到"控制台.exe"上时,控制台程序将输出这个路径。其实许多软件都包含了这一步读取传入参数的方法。那么这个ILSpy的入口函数里,应当也有类似的方式,直接拖动一个.dll到ILSpy.exe上时,ILSpy将直接打开这个文件。
因此我们可以使用注册表,将所有的文件类型与可执行程序关联起来。
注册表打开一个文件时,使用的命令其实是"{exePath}" "%1"(使用双引号包起来,可以避免路径里包含空格导致异常) ,后面这个"%1"表示需要传入的参数。
所以,我们只需要在注册表里,往每个对应的类型里添加可执行程序路径,则可以完成这个操作。
===========================理论部分说完===========================
根据上述思路,在下就编写了一个小工具,可以把任意格式关联到任何程序上,使右键选中这个文件时,右键列表里将出现"用XX打开"的命令。
打开界面是这个样子:
完成的话,这个Open With ILSpy, Open With ILDasm都是自定义添加上去的。
步骤比较简单,如下:
1.设置命令名,也就是"Open With ILSpy",也可以是其他自定义的命令名;
2.填写文件类型,如.exe, .mp4;
3.设置打开所用exe的绝对路径,绝对路径也就是物理路径全名称。点击右侧的"..."可以浏览文件夹选择目标文件,也可以使用下拉菜单选择历史记录里的路径;
4;额外参数,
额外参数是以{exePath} {leftParam} "%1" {rightParam} 为顺序填充的命令。在某些情况下需要如此填写,比如使用Unity直接以目标平台android打开文件夹,则需要填写在"%1" 路径参数的左侧("Unity.exe" -buildTarget android -projectPath "%1",这是在注册表里的结果)。
填写完成的参考图:
5. 最后一步,点击注册,这个命令将写入到注册表里,从而在右键菜单里添加指定的命令。
6.Extra。如果需要注销这个命令,则反过来,只需要填写命令名,和文件类型,然后点击注销,如果该命令被注册过,则能够成功完成注销。
Github链接:GitHub - DoyoFish/SetOpenWithCommand: Used for open .exe with custom command.
下载链接: