J'ai écrit un programme qui modifie un type de fichier spécifique et je souhaite donner à l'utilisateur la possibilité de définir mon application comme éditeur par défaut pour ce type de fichier (puisque je ne veux pas d'installateur) au démarrage. J'ai essayé d'écrire une méthode réutilisable qui associe un fichier pour moi (de préférence sur n'importe quel système d'exploitation, bien que j'exécute Vista) en ajoutant une clé à HKEY_CLASSES_ROOT, et je l'utilise avec mon application, mais ça ne semble pas fonctionner.Associer l'extension de fichier à l'application
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();
}
Toute idée pourquoi il ne fonctionne pas? Un exemple d'utilisation peut être
SetAssociation(".ucs", "UCS_Editor_File", Application.ExecutablePath, "UCS File");
La partie de la méthode qui utilise « CurrentUser » semble fonctionner si je fais la même chose en utilisant regedit, mais en utilisant mon application, il ne fonctionne pas.
Avez-vous essayé l'exécution de votre programme en tant qu'administrateur? –
Je suis un administrateur système, donc oui. – User2400
UAC signifie que votre application ne fonctionne pas en tant qu'administrateur, sauf si vous l'exigez explicitement. Vous exécutez Vista, Vista inclut UAC. Pouvez-vous vérifier si le programme s'exécute en tant qu'administrateur? –