В моем приложении я делаю это при запуске:
[System.Runtime.InteropServices.DllImport("Shell32.dll")]
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
private void GetDefaultsFromRegistry()
{
if (Registry.GetValue("HKEY_CLASSES_ROOT\\MyApp", String.Empty, String.Empty) == null)
{
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Classes\\MyApp", "", "My File Type");
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Classes\\MyApp", "FriendlyTypeName", "My Friendly Type Name");
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Classes\\MyApp\\shell\\open\\command", "",
"path\\to\\my\\app \"%1\"");
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Classes\\.ext", "", "MyApp");
//this call notifies Windows that it needs to redo the file associations and icons
SHChangeNotify(0x08000000, 0x2000, IntPtr.Zero, IntPtr.Zero);
}
}
Разумеется, со всеми путями, именами и расширениями, измененными для вашего приложения.
Будьте осторожны с перепискойоднако пользовательская ассоциация .txt.Я проверяю назначение при каждом запуске, потому что мое приложение использует пользовательский тип и разворачивается только в системах с внутренним отображением.Я не знаю, где развертывается ваше приложение, но я был бы очень раздражен, если бы какая-то случайная утилита, которую я скачал из Интернета, постоянно меняла мою ассоциацию файлов .txt, и я уверен, что многие другие люди тоже будут.