3

我正在用 C# 编写一个应用程序以防止某些可执行文件打开。我的应用程序将检测打开选定的可执行文件并显示消息框让用户选择是否运行它。

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="calc.exe"


我已经使用了本主题中的上述方法,但它会阻止任何路径中具有该名称的所有可执行文件。我想要的是仅阻止闪存驱动器或指定路径中的可执行文件。

例子。我选择当驱动器 F:/ 中的“a.exe”打开时,我的程序将显示消息框。如果我使用参考主题中的方法,它将阻止任何路径中的所有“a.exe”,如“C:/a.exe”、“D:/a.exe”或“F:/a.exe”,但我希望它仅阻止 F:/ 中的 a.exe,而不阻止其他路径或驱动器中的 a.exe。

有什么想法吗?

非常感谢。


附加信息:

对这个问题的简单理解是......我希望我的程序在指定路径中阻止一些 exe。当用户尝试打开指定的 exe 时,我的应用程序将阻止它并有一个消息框提醒用户。如果用户单击“否”,则指定 exe 不会运行;如果用户单击“是”,则指定 exe 将正常运行。

当用户意外运行病毒文件时,这将像杀毒软件一样工作,杀毒软件会阻止它并有一些消息询问用户他是否仍然想运行它。

4

1 回答 1

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/

于 2013-10-08T06:57:05.197 回答