Usuário com melhor resposta
FileSystemWatcher

Pergunta
-
Galera estou usando o FileSystemWatcher para visualização de arquivos em determinado diretorio, porém consigo visualizar quem deleta / renomeia / cria arquivos ou pastas no determinado diretorio, gostaria de saber sobre EXECUÇÃO de algum arquivo dentro do diretorio, será possivel?
Valeu galera!!!
Linguagem C# - VS 2008 - FW 3.5
Abraços!
Edgar Esteves - www.localdosuporte.com.br
Respostas
-
Olá Edgar,
Realmente com a classe FileSystemWatcher só é possivel fazer o que voce citou (alem de alteracoes nos arquivos tbem).
Talvez voce consiga fazer isso utilizando a classe ManagementEventWatcher .
Apenas para te dar uma ideia, o exemplo abaixo aguarda a execucao de um programa e registra esse operacao no log do Windows:
// consulta WMI a ser executada WqlEventQuery DemoQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\""); // instancia watcher ManagementEventWatcher DemoWatcher = new ManagementEventWatcher(); DemoWatcher.Query = DemoQuery; DemoWatcher.Options.Timeout = new TimeSpan(0, 0, 30); Console.WriteLine("Open an application to trigger an event"); // aguarda execucao de algum programa ManagementBaseObject e = DemoWatcher.WaitForNextEvent(); // nome do programa que foi executado string EventName = ((ManagementBaseObject)e["TargetInstance"])["Name"].ToString(); Console.WriteLine(EventName); // salva operacao no log EventLog DemoLog = new EventLog(""); DemoLog.Source = "EntradaLog"; DemoLog.WriteEntry(EventName, EventLogEntryType.Information); // pára o watcher DemoWatcher.Stop();
Agora veja se consegue aplicar sua para o seu caso. Dê uma pesquisa em Instrumentation, Management e WMI.
[]s
Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications- Marcado como Resposta Edgar Esteves domingo, 19 de abril de 2009 11:41
Todas as Respostas
-
Olá Edgar,
Realmente com a classe FileSystemWatcher só é possivel fazer o que voce citou (alem de alteracoes nos arquivos tbem).
Talvez voce consiga fazer isso utilizando a classe ManagementEventWatcher .
Apenas para te dar uma ideia, o exemplo abaixo aguarda a execucao de um programa e registra esse operacao no log do Windows:
// consulta WMI a ser executada WqlEventQuery DemoQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\""); // instancia watcher ManagementEventWatcher DemoWatcher = new ManagementEventWatcher(); DemoWatcher.Query = DemoQuery; DemoWatcher.Options.Timeout = new TimeSpan(0, 0, 30); Console.WriteLine("Open an application to trigger an event"); // aguarda execucao de algum programa ManagementBaseObject e = DemoWatcher.WaitForNextEvent(); // nome do programa que foi executado string EventName = ((ManagementBaseObject)e["TargetInstance"])["Name"].ToString(); Console.WriteLine(EventName); // salva operacao no log EventLog DemoLog = new EventLog(""); DemoLog.Source = "EntradaLog"; DemoLog.WriteEntry(EventName, EventLogEntryType.Information); // pára o watcher DemoWatcher.Stop();
Agora veja se consegue aplicar sua para o seu caso. Dê uma pesquisa em Instrumentation, Management e WMI.
[]s
Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications- Marcado como Resposta Edgar Esteves domingo, 19 de abril de 2009 11:41
-
-
Robson,
Na linha:
WqlEventQuery DemoQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\"");
Existe alguma possibilidade de filtrar uma pasta?
Segue exemplo que estou utilizando:
fsw.Path = tbPasta.Text; // monitora subdiretorios fsw.IncludeSubdirectories = cbSubdiretorio.Checked; // monitora somente tipos de arquivos escolhidos fsw.Filter = tbFiltro.Text; // lista de atributos que disparam eventos fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.CreationTime | NotifyFilters.Security | NotifyFilters.Size; // permite a monitoração fsw.EnableRaisingEvents = cbEvento.Checked;
Obrigado novamente!
Edgar Esteves - www.localdosuporte.com.br -
Cara,
Nao sei te dizer (acredito que nao), mas voce pode checar os campos retornados pela consulta, pode ser que haja algum que te informe a pasta de onde foi executado. Como? Dê uma olhada neste programinha:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en
Ele te mostra todos os namespaces e classes disponiveis no WMI e gera o código prontinho pra vc (em VB e C#). Escolha Win32_Process e ele te informa quais os campos que a consulta retorna.
[]s
Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications -
Achei esse artigo interessante, veja se ajuda você ou qualquer outra pessoa que possa acessar esse tópico:
http://www.linhadecodigo.com.br/artigo/3097/monitorando-arquivos-e-diretorios-com-filesystemwatcher.aspx