小助手(应用盒子之我的实现思路及示例程序)

很早之前痴迷于木马病毒,但是苦于没有公网ip,也没有条件做端口映射,没办法和木马病毒取得联系,实在不爽。后来我就想通过更改网页中的内容来控制它,虽然效率肯定不会高,但是至少能控制了,到现在对木马病毒一点兴趣也没了。

这几天闲着没事,就想做一个类似于应用盒子的小程序,下面谈谈我的实现思路和理解吧。

 还是老问题,没有服务器,也租不起服务器,就又想到了之前的那个想法,通过更改网页内容来控制它,于是我就想到了博客园,哈哈(园丁们不要搞我撒,我是好人。。)。首先得有放置应用的地方,我就利用博客园里的上传文件功能来实现这个了(其实只要你能有一个应用的绝对路径的url就可以),好的,现在有了应用放置的地方,就类似于服务器的上传功能,但是我做的时候发现博客园的上传文件有格式限制,那咋办,很简单了,我们上传的时候重命名成博客园允许上传的文件格式就好了嘛,然后再下载的时候在改回去。我们还需要有那么个类似配置文件的东西,这个配置文件也是要在服务器上的,老办法,我就发布个博客,博客内容的格式我们规定好就是配置文件,这不就好办了,嘿嘿,在这个配置文件(就是博客的一篇文章页面)里,我们规定好格式,在里面写好加载刚刚上传的那个应用所需的一些信息,比如从哪个地址下载这个应用,加载应用都需要什么信息,这个应用的版本号是多少等等这些。

OK,这样我们有了一个基本的配置文件了,但是我们还想要第二个应用怎么办,同样的,我们可以继续在这个博客文章页面里写上第二个的相关信息,设计好格式,就可以区分出哪个是第一个,哪个是第二个应用了。是不是是不是感觉很快就要成功了,原来好简单的说,但是别忘了,很多应用不仅仅是一个文件就可以搞定,它可能附带很多资源文件,怎么办?同样的办法,只要格式设计的好什么都可以。

我的格式是这样的,但不一定就是好的,反正是可以用了:

【page】翻译小工具:Translation:Translation.TranslationControl:true:2:Translation.dll:https://files.cnblogs.com/lipf/Translation.apk:EvilGenius:一个简单的翻译小工具,调用有道翻译的接口实现。【page】

【page】作为标签,两个【page】中的内容就是配置信息,【page】之外可以随便写点说明信的内容,我的程序只识别两个【page】中的内容;配置信息分为几个部分,以中文的":"隔开,第一个信息“翻译小工具”指示这个应用在盒子里显示的标题,第二个信息是加载这个应用所需的信息,应用入口类的命名空间,第三个信息是应用入口类的全名称,第四个信息指示这是一个应用还是某个应用的资源文件,第五个信息是版本号,第六个信息是文件名,第七个是文件下载地址,第八个是应用的作者,第九个是应用的简单描述。

在关于如何解决应用带有资源文件的时候,我是这样想的,如果第一个信息,也就是应用在盒子里要显示的标题如果之前出现过,并且第四个信息是false,这样我确定他是之前出现的那个应用的资源文件,我这里强制规定,所有应用不可同名,就是第一个信息部能重复再多条配置信息中,而且如果之前出现过,那么下次出现它的第四个信息必须为false,第一次出现必须为true(很死板,但是可以达到效果,如果你有更好的办法,希望留言或其他方式告诉我哈,感激不尽)。

这样我们的配置页就算有了,然后我就想,要是这个配置页因为某些原因,需要更多个配置页怎么办,不能让所有的配置信息存到这一个页面里吧,而且有个问题是,这样及其不灵活,大家都知道,那么多应用部可能是你一个人做的,可以说是大家一起做的,那么我们就需要给别人提供接口,让他们做的应用也可以在我们的程序中跑起来,于是我就想到了那些网络游戏,他们的客户端在连接服务器之前会去下载一个服务器列表,根据这个列表去连接服务器,我们上面的配置页不就类似一个服务器吗,那我们也需要一个存放服务器列表的页面,这样我们的程序不在固定的去之前写死的配置页地址中获取配置信息了,因为你不能把你的博客密码告诉所有人,他们就没办法修改你的博客内容,也就改不了配置信息,于是我们又做了一篇博客,用来存放所有的配置页的地址,就类似上面说到的网络游戏去下载服务器列表一样,我们的程序现在去这个存放有所有配置页的页面中取出所有的配置页,然后再获取配置信息加载其中的应用。

虽然这样依然不能把接口做到开放,但是至少比之前开放多了,别人可以在我们的存放有所有配置页的博客中留下他们的配置页地址,这样我们的程序就可以去他留下的那个配置页地址中寻找配置信息并加装对应的应用了。

我的配置页存放页面中的格式设计的很粗暴:

【page】http://www.cnblogs.com/lipf/archive/2012/12/03/2799974.html【page】

中间就是一个地址,其他什么都没有,有兴趣的朋友可以加上作者啊什么的相关信息等等。

所有条件准备完成,下面就可以跑下我们的程序了

首先我们的程序去这个总的配置页中取出所有配置页的地址,然后保存到一个列表里,然后遍历这个列表,对每一个配置页读取里面的配置信息,遇到第四个信息为true的,就生成对应的数据用于表示这个应用的一些信息,遇到false的就寻找他是哪个应用的资源文件,然后放到那个资源文件对应的目录下,下载所有的文件,这样遍历完所有的配置页,我们的程序已经得到一个存有所有应用对应数据的列表,紧接着,我们的程序利用这个数据列表把发现的所有应用展示到界面中,当用户选择一个应用之后,我们根据那个应用对应的数据动态的去加载用户选择的应用,这样这个应用成功的在我们的盒子里跑起来了,嘿嘿。

当然应用应该也是有格式限制的,具体什么限制我也没搞清楚,在我的程序里,应用必须是wpfUsercontrol编译生成的dll,也有想过不做限制的,但是技术有限,如果你有别的想法可以交流下哈,谢谢了。

好了,就到这里吧,下班了,嘿嘿。

最后附上示例程序代码下载地址:https://files.cnblogs.com/lipf/%E5%B0%8F%E5%8A%A9%E6%89%8B.rar

其中的应用代码下载地址:https://files.cnblogs.com/lipf/Translation.rar

因为是测试,我就只做了一个简单的翻译的小工具的应用。

原文地址:https://www.cnblogs.com/lipf/p/2801793.html