Author:水如烟
这里用到TypeHelper类 。
我们知道,桌面应用程序一般有两种类型,一是Windows应用程序,二是控制台应用程序。
如何判断调用自己所在Dll的主程序是Windows还是控制台应用程序呢?
解决这个问题,基点是ApplicationBase,ConsoleApplicationBase和WindowsFormsApplicationBase,
攻击的地方,当然是Application了。
我也曾想到能否从Thread.CurrentContext,Thread.CurrentThread,AppDomain.CurrentDomain来切入,不过没有去看。现在想“当然”的Application,有点武断,况且,Application源于System.Windows.Forms空间,用它来判断ConsoleApplicationBase,总觉得有些刺。
据自己的测试,主程序的有三种体现方式,如下:
Public
Enum
ApplicationType
WindowsForms ' 这是Form启动的Windows应用程序
ConsoleForms ' 这是Main启动且含代码Application.Run(New Form)的控制台应用程序
Console ' 这是Main启动无窗体的控制台应用程序,就算是Form.ShowDialog也列于此项
End Enum
WindowsForms ' 这是Form启动的Windows应用程序
ConsoleForms ' 这是Main启动且含代码Application.Run(New Form)的控制台应用程序
Console ' 这是Main启动无窗体的控制台应用程序,就算是Form.ShowDialog也列于此项
End Enum
MyApplicationBase.vb
Imports
Microsoft.VisualBasic.ApplicationServices
Namespace LzmTW.uSystem.uForms
Public Class MyApplicationBase
' System.Windows.Forms.Application+ThreadContext
Namespace LzmTW.uSystem.uForms
Public Class MyApplicationBase
' System.Windows.Forms.Application+ThreadContext