Можно и скриптом (код надергал из более сложного но рабочего варианта и не проверял, поэтому возможно потребуется отладка).
' Запрет запуска приложений не с диска C:
' script language="VBScript"
Dim FSO, WshShell, objWMIService
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","Sink_")
'контрольной строка (содержит диски с которых разрешен запуск приложений)
dim CntrlStr
CntrlStr = "C:"
'Регистрация временного потребителя создания процессов
ResOut ModeLog,"Регистрация временного поребителя создания процессов",0,LogPath,LogName
objWMIService.ExecNotificationQueryAsync objSink, _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE "&_
"TargetInstance ISA 'win32_Process'"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Процедура обработчик события OnObjectReady объекта SWbemSink
' oOutParams - объект
' oContext
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Sink_OnObjectReady(oOutParams, oContext)
Dim StrLog,res,TmpStr,pos,inpos,q, Disk,CommandLineUC, ExecutablePathUC
Dim CntrlStrUC, ExecutableDiskUC
On Error Resume Next
CommandLineUC = UCase(oOutParams.TargetInstance.CommandLine)
ExecutablePathUC = UCase(oOutParams.TargetInstance.ExecutablePath)
CntrlStrUC = UCase(CntrlStr)
ExecutableDiskUC = Left(ExecutablePathUC,InStr(3,ExecutablePathUC,"\"))
if InStr(CntrlStrUC,ExecutableDiskUC) = 0 then
oOutParams.TargetInstance.Terminate()
End If
If Err.Number<>0 Then
'Объект процесса не ответил
End If
On Error Goto 0
End Sub 'Sink_OnObjectReady(oOutParams, oContext)