Они действительно дураки. Если вы посмотрите на RFC 3986 Приложение A, вы увидите, что «пространство» просто не упоминается нигде в грамматике для определения URL-адреса. Поскольку это не упоминается нигде в грамматике, единственный способ кодировать пространство - это процентное кодирование (%20
).
На самом деле RFC даже утверждает, что пробелы являются разделителями и их следует игнорировать:
В некоторых случаях может потребоваться добавить дополнительные пробелы (пробелы, разрывы строк, вкладки и т. д.), чтобы разбить длинный URI на строки. Пробел должен игнорироваться при извлечении URI.
и
Для обеспечения надежности программное обеспечение, которое принимает пользовательский URI, должно попытаться распознать и удалить оба разделители и встроенные пробелы.
Любопытно, что использование
+
в качестве кодирования пространства не упоминается в RFC, хотя оно зарезервировано как суб-делиметр. Я подозреваю, что его использование либо просто конвенции, либо связано с другим RFC (возможно, HTTP).
Вы должны использовать WMI . Затем вы можете отслеживать Win32_ProcessStartTrace
, чтобы получать уведомления о начале процесса. Кроме того, вы даже можете использовать Win32_ProcessStopTrace
, чтобы получать уведомления, когда процесс останавливается. Ваш код будет выглядеть так:
Public Shared Sub Main()
Dim startWatcher As ManagementEventWatcher = New ManagementEventWatcher(New WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"))
startWatcher.EventArrived += New EventArrivedEventHandler(startWatcher_EventArrived)
startWatcher.Start()
End Sub
Private Shared Sub startWatcher_EventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
Dim logString As String ="{0}: Process started: {1}".Format( Now.ToString(), e.NewEvent.Properties("ProcessName").Value)
Using sw As StreamWriter = File.AppendText(YourLogFile)
sw.WriteLine(logString)
End Using
End Sub