2016-07-11 4 views
-3

Je veux détecter Free Pascal installé (à propos de la version, répertoire d'installation ...) sur mon ordinateur Windows. En utilisant C#, comment trouver des informations FPC sur le registre Windows?Comment détecter Free Pascal installé sur un ordinateur Windows?

+0

Vous écrivez du code, généralement. Qu'avez-vous essayé jusqu'à présent? –

+0

Pourquoi voulez-vous faire cela. Après tout, il y a beaucoup de façons différentes d'obtenir FPC sur une machine –

+0

Essayez 'C: \> où fpc' pour obtenir l'emplacement du programme et' C: \> fpc -iW -iD' pour obtenir la version FPC et la date par exemple (en utilisant ligne de commande). Si cela fonctionne, vous pouvez simplement l'utiliser dans l'application C# en appelant 'cmd' et en attrapant sa sortie. – Abelisto

Répondre

2

Free Pascal est open source, le fichier InnoScript pour le programme d'installation est available

De cela, vous pouvez le voir il y a deux groupes de clés de Registre:

  1. Les extensions sont enregistrés à l'IDE textmode, si elle est installée
  2. le répertoire est ajouté au PATH

deux de différentes manières en fonction de si l'installation est exécuté un s admin ou non, selon le résultat des fonctions IsHKLM (Not) Writeable

Les versions fournies avec Lazarus sont installées par un installateur différent, et donc un script différent.

Et puis il y a des gens qui construisent à la main. FPC n'a pas besoin de configuration système pour fonctionner, donc si le système d'empaquetage (setup, msi, etc.) ne le fait pas, la seule chose à faire est de chercher sur le disque pour fpc.exe ou essayer des emplacements comme c: \ fpc \ bin \ i386-win32 et c: \ lazarus \ fpc \ bin \ i386-win32

1
using Microsoft.Win32; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Threading; 
using System.Management; 

namespace ConsoleApplication7 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine(IsProgramInstalled("Free Pascal")); 
      Console.ReadKey(); 
     } 

     public static bool IsProgramInstalled(string programDisplayName) 
     { 

      Console.WriteLine(string.Format("Checking install status of: {0}", programDisplayName)); 
      foreach (var item in Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall").GetSubKeyNames()) 
      { 

       object programName = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + item).GetValue("DisplayName"); 

       string n = (string)programName; 
       if (n!= null && n.Contains(programDisplayName)) 
       { 
        Console.WriteLine("Install status: INSTALLED"); 
        Console.WriteLine(programName); 
        Console.WriteLine(Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + item).GetValue("InstallLocation")); 
        return true; 
       } 
      } 
      Console.WriteLine("Install status: NOT INSTALLED"); 
      return false; 
     } 

    } 
} 
+0

Vous souvenez-vous que le programme peut être accessible simplement par 'PATH' et n'ont aucune "traces" dans le registre? – Abelisto

+0

comment utiliser PATH? Mon code ci-dessus fonctionne correctement? –

+1

Le code ci-dessus s'exécute correctement, pour trouver des éléments dans le Registre pour les programmes installés par un programme d'installation Windows. Mais, comme cela a été dit, FPC n'est pas toujours installé par un installateur Windows, et peut ne pas avoir une entrée dans le Registre. Il n'a même pas besoin d'avoir une entrée dans la variable d'environnement PATH, puisque cela peut même être fait en différé, c'est-à-dire seulement lorsque FPC est appelé, par ex. dans un fichier batch. Comment venir? Parce que certaines personnes n'utilisent pas d'installateur et installent tout manuellement, comme ils l'aiment. –