Как бы ужасно это не звучало, вы можете использовать Microsoft.VisualBasic.ApplicationServices, чтобы сделать это действительно простым (вы можете добавить ссылку на Microsoft.VisualBasic в свой проект на c #).
В качестве быстрого примера вы можете создать новый проект C # WinForms и изменить Program.cs, чтобы он выглядел примерно так:
class Program : WindowsFormsApplicationBase
{
static Form1 mainForm = null;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] commandline)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Program prog = new Program();
prog.MainForm = mainForm = new Form1();
prog.Run(commandline);
}
public Program()
{
this.IsSingleInstance = true;
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
mainForm.Startup(eventArgs.CommandLine.ToArray());
}
}
Затем в Form1 добавьте метку и небольшой код, чтобы показать, что он работает:
public void Startup(string[] commandLine)
{
string output = "";
foreach (string arg in commandLine)
output += arg + "\n";
label1.Text = output;
}
public Form1()
{
InitializeComponent();
Startup(Environment.GetCommandLineArgs());
}
Единственный недостаток этого небольшого фрагмента заключается в том, что аргументы командной строки, которые вы получаете при первом запуске, включают имя приложения, но не включаются при последующих запусках.