2016-05-02 17 views
0

Zuerst scanne ich für jedes installierte Programm auf dem System. Von diesem bekomme ich den InstallLocation und DisplayName. Jetzt möchte ich die gescannten Programme von diesem Namen oder Ort ausführen. Gibt es eine Möglichkeit, dies zu tun, oder brauche ich wirklich den Namen oder Speicherort der ausführbaren Datei?Programme vom Installationsort ausführen

public static class InstalledPrograms 
{  
    const string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 

    public static List<string> GetInstalledPrograms() 
    { 
     var result = new List<string>(); 
     var termsList = new List<string>(); 
     result.AddRange(GetInstalledProgramsFromRegistry(RegistryView.Registry32)); 
     result.AddRange(GetInstalledProgramsFromRegistry(RegistryView.Registry64)); 
     result = result.Distinct().ToList(); 
     result.Sort(); 
     foreach (var i in result) 
     { 
      Console.WriteLine(i); 

     } 
     return result; 
    } 

    private static IEnumerable<string> GetInstalledProgramsFromRegistry(RegistryView registryView) 
    { 
     var result = new List<string>(); 

     using (RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView).OpenSubKey(registry_key)) 
     { 
      foreach (string subkey_name in key.GetSubKeyNames()) 
      { 
       using (RegistryKey subkey = key.OpenSubKey(subkey_name)) 
       { 
        if (IsProgramVisible(subkey)) 
        { 
         var ii = (string)subkey.GetValue("InstallLocation"); 
         result.Add(ii); 
        } 
       } 
      } 
     } 

     return result; 
    } 

    private static bool IsProgramVisible(RegistryKey subkey) 
    { 
     var name = (string)subkey.GetValue("DisplayName"); 
     var releaseType = (string)subkey.GetValue("ReleaseType"); 
     //var unistallString = (string)subkey.GetValue("UninstallString"); 
     var systemComponent = subkey.GetValue("SystemComponent"); 
     var parentName = (string)subkey.GetValue("ParentDisplayName"); 

     return 
      !string.IsNullOrEmpty(name) 
      && string.IsNullOrEmpty(releaseType) 
      && string.IsNullOrEmpty(parentName) 
      && (systemComponent == null); 
    } 
} 
+0

See 'System.Diagnostics.Process' Informationen darüber, wie ein Programm zu starten. –

Antwort

1

Die kurze Antwort ist kein Sie nicht den Anwendungspfad mit, dass ein Teil der Registrierungsstruktur finden. Diese Information ist abhängig von der Installation. Sie können das Deinstallationsprogramm finden, da dieser Pfad bereitgestellt wird. Ich bezweifle ernsthaft, dass die Benutzer Ihres Programms mit Ihnen zufrieden sein würden, wenn Sie eine Deinstallation aller installierten Anwendungen/Hotfixes aufrufen.

Das einzige, was Sie tun können, ist diese Verzeichnisse für .exe Dateien zu scannen. Wenn Sie nur einen haben, dann könnten Sie in Ordnung sein. Natürlich, wenn sie mit einem Installer installiert wurden, gibt es eine gute Chance, dass ein Uninstaller im selben Verzeichnis lebt.

Es gibt einfach keine vorhersehbare Art und Weise, einfach jede installierte Anwendung zu starten. Manchmal sind die installierten Objekte Bibliotheken und Erweiterungen bestehender Produkte.

Eine andere Sache zu prüfen ist, dass Speicher-Anwendungen neue Regeln Umgebung, wie sie installiert/deinstalliert und sogar aufgerufen. Windows Store-Apps haben keine ".exe" -Datei, die Sie einfach aufrufen können, selbst wenn Sie sie finden könnten.

+0

Ich möchte nicht nur alle installierten Programme ausführen. Ich möchte eine Liste von Programmen erstellen, damit Benutzer ihre Programme aus dieser Liste ausführen können. Mehr wie Shortcuts. Ich kann die Verzeichnisse nach EXE-Dateien durchsuchen. Aber diese Deinstallation im selben Verzeichnis ist in der Tat ein Problem. Irgendwelche Vorschläge, wie man mein Problem oder andere Wege löst, um dieses Problem zu lösen? –

+0

Richtig, und Store-Apps sind ein weiteres Problem. Es gibt keine Möglichkeit zu sagen, welche EXE korrekt ist, wenn es mehrere gibt (und ich versende Software, die Dienstprogrammcode in separaten EXEs hat). –

Verwandte Themen