Что вы хотите сделать, это унаследовать класс от WindowsFormsApplicationBase , установив для защищенного свойства IsSingleInstance значение true:
// This should all be refactored to make it less tightly-coupled, obviously.
class MyWindowsApplicationBase : WindowsFormsApplicationBase
{
internal MyWindowsApplicationBase() : base()
{
// This is a single instance application.
this.IsSingleInstance = true;
// Set to the instance of your form to run.
this.MainForm = new MyForm();
}
}
Тогда основной метод вашего приложения выглядит так:
// This should all be refactored to make it less tightly-coupled, obviously.
public static void Main(string args[])
{
// Process the args.
<process args here>
// Create the application base.
MyWindowsApplicationBase appBase = new MyWindowsApplicationBase();
// <1> Set the StartupNextInstance event handler.
appBase.StartupNextInstance = <event handler code>;
// Show the main form of the app.
appBase.Run(args);
}
Обратите внимание на раздел, помеченный <1>. Вы устанавливаете это с помощью обработчика событий для StartupNextInstanceEvent . Это событие вызывается, когда запускается экземпляр next вашего приложения, когда у вас есть приложение с одним экземпляром (которое вы указали в конструкторе MyWindowsApplicationBase). Обработчик события будет передавать производный от EventArgs класс, который будет иметь аргументы командной строки, которые затем можно обработать в работающем экземпляре вашего приложения.
Затем все, что вам нужно сделать, это установить обычные ассоциации файлов для типов файлов, которые вы хотите, чтобы ваше приложение обрабатывало, и вы настроены.