我现在正在用vc编一个程序,这个程序要调用a.exe。但a.exe不能通过::CreatProcess来调用,必须是先调用cmd.exe,然后在命令提示符里输入a.exe回车才能运行。      我该怎样做才能调用a.exe呢?

解决方案 »

  1.   

    WinExec("cmd.exe \k a.exe",SW_SHOW);
      

  2.   

    大虾。不行啊。    我继续向你请教。具体情况是这样的:
    现在我的程序要调用MySQL的备份工具来对MySQL数据库进行备份。不知你使用过MySQL没有,MySQL的备份工具mysqldump是一个控制台程序,双击它并不能打开它的界面。在运行对话框输入备份命令也不行,必须要在cmd下输入命令运行才行。开始我以为通过CreatProcess函数可以调用mysqldump.我的代码是这样的:STARTUPINFO si;
    PROCESS_INFORMATION pi;
    si.cb=sizeof(STARTUPINFO);
    si.lpReserved=NULL;
    si.lpDeaktop=NULL;
    si.lpTitle=NULL;
    si.dwFlags=STARTF_USESHOWWINDOW;
    si.wShowWindow=SW_SHOW;
    si.cbReserved2=0;
    si.lpReserved2=NULL;
    CString strProcess;
    strProcess.Format("mysqldump --user=root --password=828707 stu>E:\\114.dmp");::CreatProcess(NULL,(lpstr)(LPCTSTR)strProcess,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);上面mysqldump --user=root --password=828707 stu>E:\\114.dmp是mysql的备份命令,功能是对数据库stu进行备份,生成备份文件E:\114.dmp.程序运行没有出错,但是结果并没有生成备份文件114.dmp。如果先在运行对话框里输入cmd,弹出cmd的界面,然后输入mysqldump --user=root --password=123456 stu>E:\114.dmp这样就能生成备份文件114.dmp。之前我已经发过贴问过这个问题。一位碰过这个问题的高手说这个问题我也碰到过,应该是mysql的重定向和管道有点问题,分了两步解决的。     我照你上面所说的把代码改为:
    WinExec("cmd.exe \\k mysqldump --user=root --password=828707 stu>E:\\114.dmp",SW_SHOW);      结果是弹出一个cmd的界面,上面是E:\.
      

  3.   

    相当sorry.
    是 WinExec("cmd.exe /k a.exe",SW_SHOW);呵呵/k后面的可用 " "引起来
      

  4.   

    这里的a.exe后面可以添加参数吗?
      

  5.   

    WinExec("cmd /k \"mysqldump --user=root --password=828707 stu>E:\\114.dmp\"",SW_SHOW);
      

  6.   

    为什么不能用CreateProcess呢?WinExec只是为了向16位兼容才保留的API,所以尽量不要用。Windows在内部创建进程的方式就是CreateProcess,不论你是双击图标也好,还是在命令行输入也好,都调用这个函数
      

  7.   

    WinExec("cmd /k \"mysqldump --user=root --password=828707 stu>E:\\114.dmp\"",SW_SHOW);      是对的。
         我至今没搞懂为何不能用CreateProcess。我估计这是MySQL的问题。
      

  8.   

    ShellExecuteEx是判断ShellExecute是否运行成功的,肯定不行。
      

  9.   

    楼上的,ShellExecuteEx函数是ShellExecute的扩展,不是判断是否成功的况且Shell调用在内部也是调用CreateProcess的楼主可以说说为什么不能调用那个函数,出了什么错误?用GetLastError看看错误的值是什么东西
      

  10.   

    你把CreateProcess的参数看看仔细;另外,用CreateProcess也不要重定向了,自己创建管道接收命令行输出再存成文件。
      

  11.   

    strProcess.Format("cmd \k /"mysqldump --user=root --password=828707 stu>E:\\114.dmp/"");::CreatProcess(NULL,(LPSTR)(LPCTSTR)strProcess,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);     这样也是可以的。