怎样传递参数给正在运行的winfrom(exe 程序不是 form直接传参数。) 程序?如果软件未运行
在运行框里面运行D:\text.exe G:\参数文件.txt 
(如一些播放器右键选中文件, 添加到播放列表类似功能)
软件可以在 static void Main(string[] paras)
里面获取到传过来的路径参数。
但是,如果软件是运行状态的,
再运行D:\text.exe G:\参数文件.txt 
只会启动一个新的exe 文件。 怎样把这个参数,传到当前运行的程序里面。可以通过现在运行的这个exe , 
把参数发送到以前运行的那个exe吗? 
然后现在这个exe 自动关闭。或者有其他的实现方法吗?

解决方案 »

  1.   

    要么关闭当前exe,重新启动一个新的exe来传递参数
    如果要对当前启动的exe,那么就需要进行进程通信等,发送消息,socket,读写文件等方式
      

  2.   

    传递参数类似于远程通讯,用Socket固然可以,不过也可以使用更加规范的WCF来实现,只要你是.NET 2.0以上,就可以使用WCF实现本地进程间通信。
    当一个程序在运行时,打开WCF服务端,同时打开创建一个互斥锁。当再次打开这个程序时,检查互斥锁是否存在,已经存在则该程序不运行,但是关闭之前处理传递给这个程序的参数,通过WCF客户端发送给服务端。因为互斥锁的存在,意味着已经运行了一个程序,固然服务端存在,通信的条件成立。
      

  3.   

    新问题...我在注册表,为文件添加了右键菜单, 值是  D:\text.exe "%1",为什么选中多个文件的时候(比如3个),
    会运行3次  "D:\text.exe 文件1路径","D:\text.exe 文件2路径","D:\text.exe 文件3路径"。能让他直接把路径加到后面吗(只运行一次)? 
    像这样:"D:\text.exe 文件1路径  文件2路径  文件3路径"??是不是吧%1换成其他的参数就可以了?
      

  4.   

    笨人有笨办法,
    你可以在EXE里开启一个线程,实时读取本地某文件
    这样你就可以直接把要给EXE的参数写到本地的那个某文件里
      

  5.   


    同意 我刚想说的就是这个 一看有这个思路了 呵呵 当然没必要非得开线程 Timer 实时读取也行哈笨人笨办法啦
      

  6.   

    DDE通信虽然过时 但是很好用
      

  7.   

    从WindowsFormsApplicationBase派生你的应用程序类
    处理StartupNextInstance事件。
      

  8.   

    如果用filewatch就更好了,发现文件被写入了就读取
      

  9.   

    用win32 API SendMessage 消息给指定的窗体,那个窗体在接收消息处理        //发送消息通知
            Process[] process = Process.GetProcessesByName("进程名称");
            if (process.Length != 0)
            {
                SendMessage(process[0].MainWindowHandle, WM_USER + 0x1, 0, 0);
            }        //接收窗体
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_USER + 0x1)
                {
                    //处理你的代码
                }
                base.WndProc(ref m);
            }
      

  10.   

    你可以用Mutex判断当前程序是否已经在运行,如果运行的话,就用以上的方法将新的文件名SendMessage给正在运行的进程,SendMessage 可以传文本的,你搜一下