تشکر دوست عزیز xxnagin
با برسی لینک هایی که دادین، کدهارو برسی کردم و یک کلاس یا فانکشن برای اضافه کردن پسوند فایل به ریجستری نوشتم که شاید به درد دوستان بخوره
private void messageError(string errorText) { MessageBox.Show(errorText, "Rad Data Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign); }
public void Create(string fileTypes, string progID, string description, string defaultIcon, string execApp, string[] openWith)
{
if (!fileTypes.StartsWith(".") || fileTypes.Length < 3) { messageError("پسوند فایل باید بیشتر از 2 کاراکتر باشد و با دات شروع شود"); }
else if (progID.StartsWith(".") || progID.Length < 5) { messageError("ایدی کلید برنامه باید بیشتر از 4 کاراکتر باشد و با دات شروع نشود"); }
else if (description.Length < 5) { messageError("توضیحات برنامه باید بیشتر از 4 کاراکتر باشد"); }
else if (!File.Exists(defaultIcon)) { messageError("فایل ایکون وجود ندارد"); }
else if (!File.Exists(execApp)) { messageError("فایل اجرایی وجود ندارد"); }
else
{
try
{
if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID, "", null) != null)
{
int intt = 0;
for (int trueint = 0; trueint < 1; ) { intt++; if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID + "_" + intt, "", null) == null) { trueint = 1; progID += "_" + intt; } }
}
RegistryKey key = Registry.ClassesRoot;
key.CreateSubKey(fileTypes).SetValue("", progID);
key = key.CreateSubKey(progID, RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("", description, RegistryValueKind.String);
key.CreateSubKey("DefaultIcon").SetValue("", defaultIcon, RegistryValueKind.String);
key.CreateSubKey(@"Shell\Open\Command").SetValue(" ", "\"" + execApp + "\"" + " %1", RegistryValueKind.String);
if (openWith.Length > 0)
{
key = key.CreateSubKey("OpenWithList", RegistryKeyPermissionCheck.ReadWriteSubTree);
foreach (string str in openWith)
{
key.CreateSubKey(str);
}
}
key.Flush();
key.Close();
MessageBox.Show("ذخیره شد");
}
catch { messageError("خطا"); }
}
}
نحوه استفاده(مثال)
Create(".rad", "RadData", "Rad Data New App", "C:\\icon.ico", "C:\\MyApp.exe", new string[] { "WordPad.exe", "IExplore.exe", "notepad.exe" });
فقط این قسمتش شاید برای بعضیا سوال باشه که چرا توی حلقه اس
if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID, "", null) != null)
{
int intt = 0;
for (int trueint = 0; trueint < 1; ) { intt++; if (Registry.GetValue("HKEY_CLASSES_ROOT\\" + progID + "_" + intt, "", null) == null) { trueint = 1; progID += "_" + intt; } }
}
و پاسخ: چون اگه اون کلید(اسم یا ایدی که انتخاب میکنین) قبلا موجود باشه و شما تغیرش بدین، اون برنامه ای که اون کلید رو استفاده میکرده به مشکل میخوره. من تو حلقه کامل برسی میکنم که همچین کلیدی از قبل وجود نداشته باشه
افرین به خودم
برنامه باید در حالت ادمین اجرا بشه....چون کاربر فقط میتونه روت ریجستری رو بخونه، نمیتونه چیزی اضافه کنه
من یه برنامه نوشتم که هم میشه همه پسوندایی که توی ریجستری ذخیره شدنو همراه ایکنشون دید....هم اضافه کرد و هم حذف کرد
برنامرو برای دانلود میذارم
Rad Data - File Types On the Registry.rar
دانلود
امیدوارم مفید باشه