2016-07-11 3 views
-3

Я хочу обнаружить установленный бесплатный Pascal (о версии, установить каталог ...) на моем компьютере с Windows. С помощью C#, как найти информацию о FPC в реестре Windows?Как установить установленный Free Pascal на компьютер под управлением Windows?

+0

Вы пишете код, как правило. что ты уже испробовал? –

+0

Почему вы хотите это сделать. В конце концов, есть много разных способов заставить FPC на машине –

+0

Попробуйте 'C: \> где fpc' получить местоположение программы и' C: \> fpc -iW -iD', чтобы получить версию и дату FPC (используя командная строка). Если он работает, то вы можете просто использовать его в приложении C#, вызывая 'cmd' и вылавливая его вывод. – Abelisto

ответ

2

Free Pascal является открытым исходным кодом, то innoscript файл для программы установки available

Из этого вы можете видеть, что есть две группы ключей реестра:

  1. Расширения, зарегистрированные на текстовую IDE, если установлен
  2. каталог добавляется в PATH

И в отличаясь способами, в зависимости от того, если установка побегать s admin или нет, в соответствии с результатом функций IsHKLM (Not) Записываемый

Версии, поставляемые с Lazarus, установлены другим установщиком, и, следовательно, другой скрипт.

И тогда есть люди, которые строят вручную. FPC не нуждается в какой-либо конфигурации системы, поэтому, если система упаковки (setup, msi и т. Д.) Этого не делает, единственное, что нужно сделать, это либо поиск на диске для fpc.exe, либо, вероятно, такие места, как c: \ fpc \ bin \ i386-win32 и 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

Помните, что программа может быть доступна просто «PATH» и не имеет никакого «Следы» в реестре? – Abelisto

+0

как использовать PATH? Мой код выше работает правильно? –

+1

Приведенный выше код работает правильно, чтобы найти вещи в реестре для программ, установленных установщиком Windows. Но, как уже было сказано, FPC не всегда устанавливается установщиком Windows и может не иметь записи в реестре. Он даже не должен иметь запись в переменной среды PATH, так как это может быть сделано даже с задержкой, то есть только при вызове FPC, например. в пакетном файле. Как так? Потому что некоторые люди не используют установщик и устанавливают все вручную, как им это нравится. –

Смежные вопросы