none
主程序打开另外EXE,传新的参数进去,并且重新执行另外EXE RRS feed

  • 问题

  • 问题描述:当我打开另外一个EXE时,同时传了lpstrCmdLine参数="//SD//IQbook"过去,调用CreateProcess( "//SD//player.exe","//SD//IQbook",NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);
    现在我想传另外一个新lpstrCmdLine参数="//Store//Mybook"进去,同时重新执行player.exe
    认为解决方法:
    1.是关了上面player.exe,重新执行CreateProcess( "//SD//player.exe","//Store//Mybook",NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL);
    2.只传新的lpstrCmdLine参数="//Store//Mybook"进去,同时让上面player.exe重新执行一次
    我认为第2种方法比较好,但是如果实现的啊,还是有其它好的方法呢

    2011年3月11日 2:35

答案

  • 你可以在该程序的main函数中,写一个mutex锁,来判断该程序是否已经启动,如果启动则尝试找到该进程的窗口,然后通过给窗口postmessage的方式传递参数,或者使用共享内存。
    麻烦把正确答案设为解答。
    2011年3月12日 1:01
    版主
  • 你只能再启动一个进程和你原来的一起用,你不能给一个已经启动的进程传递参数,除非你在该进程里面提供了对外的进程通信接口。

    你还是用TerminateProcess把原来启动的进程干掉,然后再建立一个新的进程吧


    0xBAADF00D
    2011年3月16日 13:49
    版主

全部回复

  • 你说让上面player.exe重新执行一次是什么意思?


    麻烦把正确答案设为解答。
    2011年3月11日 3:49
    版主
  • 就是为已打开的EXE,(传一个新的参数进去,它重新执行main函数啊),怎么现实啊,用什么函数啊
    2011年3月11日 4:33
  • CreateProcess第二个参数是LPTSTR不是LPCTSTR
    2011年3月11日 6:56
  • 关键不是你如何调用。而是那个player软件如何设计的,如果是mobile,这个不用担心,你2种操作效果一样的,如果是wince,你试试,如果他软件做了单实例,你可以方案2,反之用方案1,。
    2011 c# mvp China
    2011年3月11日 7:02
  • 你可以在该程序的main函数中,写一个mutex锁,来判断该程序是否已经启动,如果启动则尝试找到该进程的窗口,然后通过给窗口postmessage的方式传递参数,或者使用共享内存。
    麻烦把正确答案设为解答。
    2011年3月12日 1:01
    版主
  • 你只能再启动一个进程和你原来的一起用,你不能给一个已经启动的进程传递参数,除非你在该进程里面提供了对外的进程通信接口。

    你还是用TerminateProcess把原来启动的进程干掉,然后再建立一个新的进程吧


    0xBAADF00D
    2011年3月16日 13:49
    版主