Я пытаюсь восстановить все процессы, запущенные на машине, с обычной информацией; идентификатор процесса, имя и использование памяти. Я пытаюсь экспортировать все это в один XML-файл, однако, чтобы получить всю информацию, мне пришлось использовать 2 отдельных метода.
для получения идентификатора процесса, имени и идентификатора сеанса (владельца процесса) я использовал следующий код вместе со словарем и классом, используя .net-библиотеку под названием Cassia.
Using server As ITerminalServer = manager.GetRemoteServer("Spartacus")
server.Open()
For Each process As ITerminalServicesProcess In server.GetProcesses()
If Not String.IsNullOrEmpty(process.ProcessId) Then
dictprocess.Add(process.ProcessId, New Processes(process.ProcessId, process.ProcessName, process.SessionId))
End If
Next
End Using
Dim sbProcess As New StringBuilder
sbProcess.AppendLine("<?xml version=""1.0""?>")
sbProcess.AppendLine("<Processes>")
For Each item As KeyValuePair(Of Integer, Processes) In dictprocess
sbProcess.AppendFormat("<Name>""{0}""<ProcessID>""{1}""</ProcessID><ProcessName>{2}</ProcessName><SessionID>{3}</SessionID></Name>", item.Key, item.Value.ProcessId, item.Value.ProcessName, item.Value.SessionId).AppendLine()
Next
sbProcess.AppendLine("</Processes>")
, чтобы получить использование памяти и файла подкачки, я использовал wmi-запрос
Dim sbTest As New System.Text.StringBuilder
objWMI = GetObject("winmgmts:\\.\root\cimv2")
colObjects = objWMI.ExecQuery("Select * From Win32_Process")
For Each Item In colObjects
sbTest.AppendFormat("<ProcessID>""{0}""<ProcessName>""{1}""</ProcessName><MemoryUsage>{2}</MemoryUsage><PageFileUsage>{3}</PageFileUsage></ProcessID>", Item.ProcessID, Item.Name, (Item.WorkingSetSize / 1024), Item.PageFileUsage)
Next
Я могу записать результаты в виде двух отдельных XML-файлов:
Идентификатор процесса, имя и идентификатор сеанса:
- <Processes>
- <Name>
"540"
<ProcessID>"540"</ProcessID>
<ProcessName>wininit.exe</ProcessName>
<SessionID>0</SessionID>
</Name>
- <Name>
"552"
<ProcessID>"552"</ProcessID>
<ProcessName>csrss.exe</ProcessName>
<SessionID>1</SessionID>
Использование памяти и файла подкачки
- <ProcessUsage>
- <ProcessID>
"540"
<ProcessName>"wininit.exe"</ProcessName>
<MemoryUsage>4080</MemoryUsage>
<PageFileUsage>1464</PageFileUsage>
</ProcessID>
- <ProcessID>
"552"
<ProcessName>"csrss.exe"</ProcessName>
<MemoryUsage>5600</MemoryUsage>
<PageFileUsage>2332</PageFileUsage>
</ProcessID>
Как видите, уникальный идентификатор (идентификатор процесса) одинаков в каждом xml. Можно ли как-нибудь написать xml, чтобы информация из обоих методов была под одним тегом?