每次在Windows中启动应用程序时如何记录?

时间:2009-12-24 04:19:55

标签: java .net windows

每次启动应用程序时,我都想记录或记录,以深入了解我在Windows系统上使用最多的应用程序。我以为我可以在事件日志中创建一个事件,并在.Net程序中监听它 问题:

  • 这是解决此问题的最佳方法吗?
  • 如果是,我应该使用哪个.Net库?

我也愿意使用Java来解决这个问题。谢谢!

2 个答案:

答案 0 :(得分:2)

在.NET中,您可以创建一个shell扩展,您可以注册EXE程序,它实际上只是EXE扩展的过滤器。调用shell扩展后,您将在记录信息后执行该程序(通过调用旧功能)。

但请注意,您只能使用.NET 4.0或更高版本,目前处于测试阶段。由于以前版本的CLR的工作方式,一次只允许一个版本在一个进程中运行(包括资源管理器,操作系统进程)。

.NET 4.0在同一进程中引入了并排(SxS)CLR实例,因此可以安全地将它从.NET 4.0用作shell扩展的机制。

它还需要大量的COM互操作,但它可以完成。


关于LWoodyiii的评论,询问是否可以在旧版本的.NET中完成:是吗?是的,可以完成,但MS的官方法令是你不应该。这样做的原因是,如果其他人决定使用.NET运行shell扩展或以某种方式与操作系统接口,并且版本与您使用的版本不同,则可能会冒险操作操作系统进程

答案 1 :(得分:1)

也许您可以尝试使用非托管c ++在系统范围内挂钩CreateProcess API。 并且在C#中使用.NET interop来处理来自非托管钩子模块的事件/通知。

相关链接:
http://www.codeproject.com/KB/system/hooksys.aspx?msg=1322916
http://www.madshi.net/madCodeHookDescription.htm