Domanda

Come determinare le applicazioni associate ad una particolare estensione (es..JPG) e quindi determinare dove si trova l'eseguibile dell'applicazione in modo che possa essere avviato tramite una chiamata a System.Diagnostics.Process.Start(...).

So già come leggere e scrivere nel registro.È il layout del registro che rende più difficile determinare in modo standard quali applicazioni sono associate a un'estensione, quali sono i nomi visualizzati e dove si trovano i relativi eseguibili.

È stato utile?

Soluzione

Codice d'esempio:

using System;
using Microsoft.Win32;

namespace GetAssociatedApp
{
    class Program
    {
        static void Main(string[] args)
        {
            const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}";
            const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command";

            // 1. Find out document type name for .jpeg files
            const string ext = ".jpeg";

            var extPath = string.Format(extPathTemplate, ext);

            var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string;
            if (!string.IsNullOrEmpty(docName))
            {
                // 2. Find out which command is associated with our extension
                var associatedCmdPath = string.Format(cmdPathTemplate, docName);
                var associatedCmd = 
                    Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string;

                if (!string.IsNullOrEmpty(associatedCmd))
                {
                    Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext);
                }
            }
        }
    }
}

Altri suggerimenti

Come ha detto Anders: è una buona idea utilizzare l'interfaccia COM IQueryAssociations.Ecco un campione da pinvoke.net

@aku:Non dimenticare HKEY_CLASSES_ROOT\SystemFileAssociations\

Non sono sicuro che siano esposti in .NET, ma ci sono interfacce COM (IQueryAssociations e simili) che si occupano di questo, quindi non devi girare nel registro e sperare che le cose non cambino nella prossima versione di Windows

Anche HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\

.EST\OpenWithList chiave per l'elenco "Apri larghezza..." (valori stringa 'a', 'b', 'c', 'd' ecc. per le scelte)

.EST\Chiave UserChoice per "Utilizza sempre il programma selezionato per aprire questo tipo di file" (valore stringa 'Progid')

Tutti i valori sono chiavi, utilizzate allo stesso modo di nomedoc nell'esempio sopra.

Le associazioni dei tipi di file sono archiviate nel registro di Windows, quindi dovresti essere in grado di utilizzare il file Classe Microsoft.Win32.Registry per leggere quale applicazione è registrata per quale formato di file.

Ecco due articoli che potrebbero esserti utili:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top