我正在用C#编写一个应用程序,以防止打开一些可执行文件。我的应用程序将检测打开选定的可执行文件和显示消息框,让用户选择是否运行它。
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="calc.exe"
我使用了来自This topic的上述方法,但它将阻止来自任何路径的具有该名称的所有可执行文件。我想要的是只阻止flashdrive或指定路径中的可执行文件。
例。当驱动器F:/中的“a.exe”打开时,我选择了我的程序将显示消息框。如果我在参考主题中使用方法,它将阻止任何路径中的所有“a.exe”,如“C:/a.exe”,“D:/a.exe”或“F:/a.exe”但我希望它只阻止F中的a.exe:/不阻止其他路径或驱动器。
对此有何想法?
非常感谢。
答案 0 :(得分:2)
我在博客文章中有类似的观点,我试图检测流程实例的创建和销毁。为此,我使用ManagementEventWatcher
,此类使用
internal ManagementEventWatcher WatchForProcessStart(string ProcessName)
{
string Query = "SELECT TargetInstance" +
" FROM __InstanceCreationEvent " + "WITHIN 2 " +
" WHERE TargetInstance ISA 'Win32_Process' " +
" AND TargetInstance.Name = '" + ProcessName + "'";
string Scope = "\\\\.\\root\\CIMV2";
ManagementEventWatcher Watcher = new ManagementEventWatcher(Scope, Query);
Watcher.Start();
return Watcher;
}
范围是一个ManagementScope
实例,可以根据您的目的进行操作,如MSDN所示
ManagementScope scope =
new ManagementScope(
"\\\\FullComputerName\\root\\cimv2");
scope.Connect();
我希望这对你有所帮助。更多信息
http://msdn.microsoft.com/en-us/library/system.management.managementscope.aspx
http://www.idipous.net/how-to-monitor-proccess-creation-with-c/