2009-05-18 5 views
1

Je développe une application de bureau basée sur .NET écrite en C#. Si et quand l'application se bloque, je voudrais saisir certains détails concernant la machine sur laquelle la demande a été en cours d'exécution:Détails de la plateforme capturant API/outil - Rapport d'erreurs Windows équivalent

  1. détails du système d'exploitation: version service pack etc.
  2. .NET détails: Framework version
  3. Programmes installés
  4. Processus en cours au moment de l'incident.
  5. Quelque chose qui me manque, mais devrait être ici.

Y at-il un outil ou un ensemble d'API qui me permet d'obtenir tout cela commodément? Ce que je voudrais faire est d'invoquer l'API (quand le crash se produit), capturer tous les détails, et laisser l'utilisateur être capable de me le rapporter. Quelque chose comme le service de rapport d'erreurs de Windows.

P.S: En ce moment, je ne peux pas m'inscrire pour le Windows Error Reporting service lui-même.

Répondre

2

1) System.OperatingSystem osInfo = System.Environment.OSVersion;

2) http://geekswithblogs.net/lorint/archive/2006/01/30/67654.aspx

3) chaîne RegistryKey = @ "SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall";

 using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey)) 
     { 
      var query = from a in 
          key.GetSubKeyNames() 
         let r = key.OpenSubKey(a) 
         select new 
         { 
          Application = r.GetValue("DisplayName") 
         }; 

      foreach (var item in query) 
      { 
       if (item.Application != null) 
        Console.WriteLine(item.Application); 
      } 
     } 

(via http://www.onedotnetway.com/get-a-list-of-installed-applications-using-linq-and-c/)

4)

Process[] processlist = Process.GetProcesses(); 

foreach(Process theprocess in processlist) 
{ 
    Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); 
} 
Questions connexes