繁体   English   中英

将xml文档写入来自两个不同子例程vb.net的组信息

[英]Write an xml document to group information from two different sub routines vb.net

我试图用通常的信息检索在机器上运行的所有进程; 进程ID,名称和内存使用情况。 即时尝试将其全部导出到一个xml文件下,但要获取所有信息,我必须使用2个单独的方法。

获取进程ID,名称和会话ID(进程所有者)我使用以下代码以及字典和类,使用名为Cassia的.net库。

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文件:

进程ID,名称和会话ID:

- <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中的唯一ID(进程ID)是相同的。 有什么方法可以编写xml,以便两种方法的信息都可以在一个标签下吗?

通常,您可以创建一个类,该类具有包含您要收集的所有数据的成员。 然后使用某种类型的容器(我会建议一个键入进程ID的字典)修改你的函数来获取所述容器。 如果在容器中找到进程ID,则更新所需的字段(如果未找到),请添加该条目。 然后循环通过容器并写入xml。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM