Heim >Backend-Entwicklung >C++ >Wie verknüpfe ich eine Dateierweiterung mit einer Anwendung in C#?
Verknüpfen Sie eine Dateierweiterung mit einer Anwendung
Um einer Anwendung eine Dateierweiterung zuzuordnen, können Sie einen Schlüssel zu HKEY_CLASSES_ROOT hinzufügen. Hier ist eine wiederverwendbare Methode, die auf jedem Betriebssystem funktioniert:
<code class="language-csharp">public static void SetAssociation(string Extension, string KeyName, string OpenWith, string FileDescription) { RegistryKey BaseKey; RegistryKey OpenMethod; RegistryKey Shell; RegistryKey CurrentUser; BaseKey = Registry.ClassesRoot.CreateSubKey(Extension); BaseKey.SetValue("", KeyName); OpenMethod = Registry.ClassesRoot.CreateSubKey(KeyName); OpenMethod.SetValue("", FileDescription); OpenMethod.CreateSubKey("DefaultIcon").SetValue("", "\"" + OpenWith + "\",0"); Shell = OpenMethod.CreateSubKey("Shell"); Shell.CreateSubKey("edit").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\""); Shell.CreateSubKey("open").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\""); BaseKey.Close(); OpenMethod.Close(); Shell.Close(); CurrentUser = Registry.CurrentUser.CreateSubKey(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" + Extension); CurrentUser = CurrentUser.OpenSubKey("UserChoice", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl); CurrentUser.SetValue("Progid", KeyName, RegistryValueKind.String); CurrentUser.Close(); }</code>
Um diese Methode zu verwenden, rufen Sie sie mit den entsprechenden Parametern auf:
<code class="language-csharp">SetAssociation(".ucs", "UCS_Editor_File", Application.ExecutablePath, "UCS File"); </code>
HINWEIS: Das Code-Snippet mit „CurrentUser“ scheint zu funktionieren, wenn Sie dasselbe mit regedit tun, aber nicht mit Ihrer Anwendung. Dies liegt daran, dass Ihre Anwendung möglicherweise nicht über die erforderlichen Berechtigungen zum Ändern der Registrierung verfügt. Sie können versuchen, die Anwendung als Administrator auszuführen, um zu sehen, ob das Problem dadurch behoben wird.
Beispielverwendung:
Hier ist ein vollständiges Beispiel für die Verwendung der SetAssociation-Methode:
<code class="language-csharp">public class FileAssociation { public string Extension { get; set; } public string ProgId { get; set; } public string FileTypeDescription { get; set; } public string ExecutableFilePath { get; set; } } public class FileAssociations { // 更新注册表后,需要刷新资源管理器窗口 [System.Runtime.InteropServices.DllImport("Shell32.dll")] private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2); private const int SHCNE_ASSOCCHANGED = 0x8000000; private const int SHCNF_FLUSH = 0x1000; public static void EnsureAssociationsSet() { var filePath = Process.GetCurrentProcess().MainModule.FileName; EnsureAssociationsSet( new FileAssociation { Extension = ".ucs", ProgId = "UCS_Editor_File", FileTypeDescription = "UCS File", ExecutableFilePath = filePath }); } public static void EnsureAssociationsSet(params FileAssociation[] associations) { bool madeChanges = false; foreach (var association in associations) { madeChanges |= SetAssociation( association.Extension, association.ProgId, association.FileTypeDescription, association.ExecutableFilePath); } if (madeChanges) { SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, IntPtr.Zero, IntPtr.Zero); } } public static bool SetAssociation(string extension, string progId, string fileTypeDescription, string applicationFilePath) { bool madeChanges = false; madeChanges |= SetKeyDefaultValue(@"Software\Classes\" + extension, progId); madeChanges |= SetKeyDefaultValue(@"Software\Classes\" + progId, fileTypeDescription); madeChanges |= SetKeyDefaultValue($@"Software\Classes\{progId}\shell\open\command", "\"" + applicationFilePath + "\" \"%1\""); return madeChanges; } private static bool SetKeyDefaultValue(string keyPath, string value) { using (var key = Registry.CurrentUser.CreateSubKey(keyPath)) { if (key.GetValue(null) as string != value) { key.SetValue(null, value); return true; } } return false; } }</code>
Sie können dann FileAssociations.EnsureAssociationsSet()
aufrufen, um die angegebene Dateierweiterung mit der angegebenen Anwendung zu verknüpfen.
Die Ausgabe behält die ursprüngliche Bild- und Codeformatierung bei, während der Text neu formuliert wird, um eine nahezu synonyme Ersetzung und Variation der Satzstruktur zu erreichen. Die Gesamtbedeutung bleibt unverändert.
Das obige ist der detaillierte Inhalt vonWie verknüpfe ich eine Dateierweiterung mit einer Anwendung in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!