是这样子的,我想做一个后台监控软件,用于监控局域网内机器的情况我想禁止用户运行非管理员指定的程序,也就是说,只能让用户运行我自己指定运行的程序请问应该怎样写?谢谢

解决方案 »

  1.   

    写一个程序执行器,把.exe文件关联到这个执行器,在执行器里判断是否是允许的程序。
      

  2.   

    方法有多種。有簡單的,有複雜的,有技術性高的。
    簡單的就是改註冊表。
    複雜的就是寫程序監控是不是指定的EXE。
    最強的就是做成病毒軟件那樣,當成病毒來殺。
      

  3.   

    上楼的点子不错
    WINDOWS可以设置组策略禁止或限制运行的的,你在注册表里找找看
    好像SHELL HOOK也可以
      

  4.   

    写一个程序执行器,把.exe文件关联到这个执行器,在执行器里判断是否是允许的程序。这个方法好!真能学到东西啊,以前从来没想过!
      

  5.   

    写一个程序执行器,把.exe文件关联到这个执行器,在执行器里判断是否是允许的程序---------
    实在是高招,比监控省资源
      

  6.   

    扫描进程。看到不允许的EXE就把它杀了。我给朋友网吧做的杀PP软件的小程序就是这样!效果很好。
      

  7.   

    有那么复杂吗?windows本来就提供了这样的功能,注册表和组策略都可以做,最好的做法就是用ad的组策略我们要做的是在注册表中加入“RestrictRun”键值,以此来限制绝大多数程序的运行   运行“Regedit”打开注册表编辑器,展开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer分支(如果没有就新建),在右侧窗格中单击鼠标右键,选择“新建→Dword值”,输入子项名称“RestrictRun”,然后双击该项,在弹出的“编辑Dword值”对话框中输入键值“1”,确定后退出。  关闭注册表编辑器,重新登录系统,这时绝大部分程序已经被限制运行了,如果你想要打开某个程序时,会弹出一个警告窗口“本次操作由于这台计算机的限制而被取消。请与您的系统管理员联系”(如图1),当然你也不能通过双击REG文件来导入注册表文件了。事实上单纯使用“RestrictRun”键值限制程序运行并没有什么太大的意义,我们需要的是允许他人使用大部分的程序,而仅对一些重要或机密的程序加以限制,所以还要给自己留几扇门。  同样在上述注册表分支中,右键单击左侧窗格的“Explorer”主键,从菜单中选择“新建→主键”,输入主键名称“RestrictRun”(如图2),随后在该主键右侧键值区中新建一字符串值,并命名为“1”,双击该子项,在键值框内输入允许运行的第一个程序名。为了给自己解除程序的限制留下后路,必须将注册表编辑器加入其中,所以“1”的键值设为“Regedit.exe”。
      

  8.   

    UnBoy(联通小子) 你没有看上面的回答啊?
      

  9.   

    系统策略没用,改打开方式也不行
    如果用户启动允许的A程序,而A程序带有程序启动功能,(象一些桌面工具,)在A程序里用CREATPROCESS函数就能启动被禁止的B程序。所以只有靠给CREATEPROCESS函数挂钩或象上楼说的驱动程序(这个我不懂),才能真正实现这种功能
      

  10.   

    简单的有注册表和组策略(其实是一样都是改注册表)方面好点的是监视进程的创建如果不是管理员允许的直接KILL掉
      

  11.   

    用WMI监视进程的创建然后再判断很简单的
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colMonitoredProcesses = objWMIService. _        
        ExecNotificationQuery("select * from __instancecreationevent " _ 
            & " within 1 where TargetInstance isa 'Win32_Process'")
    i = 0
    Do While i = 0
        Set objLatestProcess = colMonitoredProcesses.NextEvent
        Wscript.Echo objLatestProcess.TargetInstance.Name
    Loop
      

  12.   

    如果碰到了重命名...
    ----------------------------------------
    可以通过解析进程信息,然后得到这个进程的EXE文件名,从而可以进一步得到EXE文件大小及其其他信息。通过这些信息来判断。应该没有问题。
      

  13.   

    如果碰到了重命名...
    ----------------------------------------特征码。加壳,解壳再特征码。不过似乎楼主是要运行他指定的程序,不是他指定的全kill了就可以了
      

  14.   

    我还是把代码都给你完成算了Option ExplicitDim objSWbemServices As SWbemServices
    Dim strComputer As String, strNameSpace As String
    Dim WithEvents objSWbemSink As SWbemSinkPrivate Sub Form_Load()
    Dim ProcName As String
        ProcName = "Notepad.exe"    '要监视的进程名
        strComputer = "."           '计算机名,.为本机
        strNameSpace = "root\cimv2" '指定命名空间为root\cimv2
        Set objSWbemSink = New SWbemSink
        Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\" & strNameSpace)  '建立指定计算机、命名空间的WMI的SWbemServices 对象的引用
        objSWbemServices.ExecNotificationQueryAsync objSWbemSink, "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'" 'and TargetInstance.Name='" & ProcName & "'"
    End Sub                                                                      '进程创建事件
    Private Sub objSWbemSink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
        if objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("Name").Value ="notepad.exe" and objWbemObject.Properties_.Item("TargetInstance").Value.Properties_.Item("ExecutablePath").Value="c:\windows\noptepad.exe" then msgbox "文件找到" '这里其实你可以把需要检测的文件名和路径存在2个对应的集合里然后从验证文件名一样再验证如果路径一样的话就是找到了目标了
    End Sub
      

  15.   

    用VB做個服務(比較隱)
    然後偷偷的殺掉不是你指定的EXE文件的進程
    (感覺在作賊一樣)
      

  16.   

    谢谢大家了,上面的方法都不大行,最后还是用VC做了一个监控程序,换句话来说,VB做不到啊