O contexto de biblioteca de classes .NET permite que seja utilizadas DLLs .NET para leitura dos dados para geração dos registros. Este contexto permite que praticamente qualquer informação seja utilizada para geração do Layout. Pode ser utilizada qualquer versão do Visual Studio ou outras ferramentas de desenvolvimento .NET para geração desta DLL.
Selecione a DLL .NET que será executada para retornar os dados do contexto.
A DLL core deverá estar localizada na mesma pasta do executor Core (onde está localizada a TNF.Gen.Exec.dll) assim como qualquer DLL que ela faça referência. A DLL do gerador RM deverá estar na pasta de instalação da Biblioteca (RM.NET).
O exemplo a seguir expõe os dados dos processos em execução no sistema para o gerador de saídas. Como parâmetro ele pode receber o nome da máquina que deseja listar os processos. O método ListaProcessos() irá ser executado pelo gerador e as propriedades das classes TestProcInfo e TestThreadInfo poderão ser utilizadas para gerar os registros do Layout.
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace RM.Gen.Test
{
///
/// Classe de teste para uso no gerador de saídas
///
public class TestClass
{
private TestClassParam Parameters;
///
/// Cria uma instância da classe
///
/// Nome da máquina para listagem dos processos
public TestClass(TestClassParam parameters)
{
this.Parameters = parameters;
}
///
/// Lista os processos em execução na máquina
///
///
public List ListaProcessos()
{
List lista = new List();
// carrega os processo em execução na máquina...
Process[] procs;
if (this.Parameters != null && !string.IsNullOrEmpty(this.Parameters.MachineName))
procs = Process.GetProcesses(this.Parameters.MachineName);
else
procs = Process.GetProcesses();
// carrega as classes de resultado...
foreach (Process proc in procs)
lista.Add(new TestProcInfo(proc));
return lista;
}
}
///
/// Parâmetros informados pelo gerador
///
public class TestClassParam
{
public string MachineName { get; set; }
}
///
/// Dados do processo do sistema
///
public class TestProcInfo
{
public TestProcInfo(Process proc)
{
this.Id = proc.Id;
this.Titulo = proc.MainWindowTitle;
this.MemoriaMax = proc.PeakWorkingSet64;
this.MemoriaEmUso = proc.WorkingSet64;
try
{
this.HoraInicio = proc.StartTime;
}
catch
{
}
// carrega a lista de threads...
this.Threads = new List();
foreach (ProcessThread procThread in proc.Threads)
this.Threads.Add(new TestThreadInfo(procThread));
}
public int Id { get; private set; }
public string Titulo { get; private set; }
public long MemoriaMax { get; private set; }
public long MemoriaEmUso { get; private set; }
public DateTime HoraInicio { get; private set; }
public List Threads { get; private set; }
}
///
/// Dados da Thread do Processo
///
public class TestThreadInfo
{
public TestThreadInfo(ProcessThread procThread)
{
this.Id = procThread.Id;
if (procThread.ThreadState == ThreadState.Running)
{
try
{
this.Processamento = procThread.UserProcessorTime;
this.HoraInicio = procThread.StartTime;
}
catch
{
}
}
}
public int Id { get; private set; }
public DateTime HoraInicio { get; private set; }
public TimeSpan Processamento { get; private set; }
}
}