Para esto debes realizar una SingleInstanceApplication
Ejemplo de como debes hacerlo
Con este código no importa si tienes abierto tu programa solamente estará permitido una sola instancia de tu aplicación y podrás recibir los parámetros como lo deseas
Código C#:
Ver originalusing System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;
using Microsoft.VisualBasic.ApplicationServices;
namespace Demo
{
static class Program
{
/// <summary>
/// Punto de entrada principal para la aplicación.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SingleInstanceApplication.Run(new Form1(), StartupNextInstanceEventHandler); // Aqui pones tu formulario
}
public static void StartupNextInstanceEventHandler(object sender, StartupNextInstanceEventArgs e)
{
if (e.CommandLine.Count > 0)
{
MessageBox.Show(e.CommandLine[1]); //No se pone indice 0 ya que corresponde al nombre de la aplicacion, a partir del 1 comienza los parametros
// Aca haces lo que quieras al tomar la ruta de tu archivo
}
}
}
public class SingleInstanceApplication : WindowsFormsApplicationBase
{
private SingleInstanceApplication()
{
base.IsSingleInstance = true;
}
public static void Run(Form f, StartupNextInstanceEventHandler startupHandler)
{
SingleInstanceApplication app = new SingleInstanceApplication();
app.MainForm = f;
app.StartupNextInstance += startupHandler;
app.Run(Environment.GetCommandLineArgs());
}
}
}