проблема с типом файла Associate в моей программе - PullRequest
2 голосов
/ 23 апреля 2011

у меня есть этот код для ассоциированных * .sdf файлов с моей программой на C #:

 public class FileAssociation
        {
            // Associate file extension with progID, description, icon and application
            public static void Associate(string extension,
                   string progID, string description, string icon, string application)
            {
                Registry.ClassesRoot.CreateSubKey(extension).SetValue("", progID);
                if (progID != null && progID.Length > 0)
                    using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(progID))
                    {
                        if (description != null)
                            key.SetValue("", description);
                        if (icon != null)
                            key.CreateSubKey("DefaultIcon").SetValue("", ToShortPathName(icon));
                        if (application != null)
                            key.CreateSubKey(@"Shell\Open\Command").SetValue("",
                                        ToShortPathName(application) + " \"%1\"");
                    }
            }

            // Return true if extension already associated in registry
            public static bool IsAssociated(string extension)
            {
                return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
            }

            [DllImport("Kernel32.dll")]
            private static extern uint GetShortPathName(string lpszLongPath,
                [Out] StringBuilder lpszShortPath, uint cchBuffer);

            // Return short path format of a file name
            private static string ToShortPathName(string longName)
            {
                StringBuilder s = new StringBuilder(1000);
                uint iSize = (uint)s.Capacity;
                uint iRet = GetShortPathName(longName, s, iSize);
                return s.ToString();
            }
        }

и я использую это так:

   if (!FileAssociation.IsAssociated(".sdf"))
                FileAssociation.Associate(".sdf", "ClassID.ProgID", "sdf File", @"d:\ICO.ico", @"D:\OpenSDF.exe");

я тоже попробую:

   if (FileAssociation.IsAssociated(".sdf"))
                FileAssociation.Associate(".sdf", "ClassID.ProgID", "sdf File", @"d:\ICO.ico", @"D:\OpenSDF.exe");

Моя проблема в том, что файл, уже связанный с другой программой, не будет работать!

например: файлы *.sdf на моем компьютере Associate открываются с помощью Visual-studio 2008

я запускаю этот код - и ничего не происходит !!

что я могу сделать?

заранее спасибо

1 Ответ

0 голосов
/ 27 апреля 2011

Попробуйте сначала удалить ключи, а затем написать свои собственные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...