我在cmd.exe中执行:
C:\Documents and Settings\Administrator>"C:\Program Files\Kaspersky Lab\Kaspersk
y Anti-Virus 2009\avp" scan D:\data
执行后,窗口是保留了的,但用我的程序执行后:
HINSTANCE hInstance = ShellExecute(NULL, _T("open"),"C:\\Program Files\\Kaspersky Lab\\Kaspersky Anti-Virus 2009\\avp","scan D:\data",NULL,SW_SHOWNA);
但执行ShellExecute后avp执行窗体是执行成功了的,但完成之后一闪就结束了,我想也像cmd.exe那样执行完了后再保留窗体

解决方案 »

  1.   

    1. ShellExecuteEx配合WaitForSingleObject 
    2. 使用命令行加/k的选项
    3. 使用命令行的命令start的加上/wait选项
      

  2.   

    HINSTANCE hInstance = ShellExecute(NULL, _T("open"),"C:\\Program Files\\Kaspersky Lab\\Kaspersky Anti-Virus 2009\\avp","scan D:\data",NULL,SW_SHOWNA);
    WaitForSingleObject(hInstance);等待句柄返回,知道扫描退出后,程序再继续
      

  3.   

    不是这个原因,加了WaitForSingleObject(hInstance); 也退出来了
    不是指主程序窗体,我说的是avp 卡巴扫描的窗体没有保留
      

  4.   

    估计你ShellExecute没有正确执行卡巴程序,参数不对等,所以卡巴程序启动,然后就退出了
      

  5.   

    请问怎样正确shellexecute?才能达到目的
      

  6.   

    CreateProcess,然后参数lpcommandparamter参数中,传整个字符串,"C:\Program Files\Kaspersky Lab\Kaspersk
    y Anti-Virus 2009\avp" scan D:\data 
      

  7.   

    你在cmd试下
    C:\Documents and Settings\Administrator>"C:\Program Files\Kaspersky Lab\Kaspersk
    y Anti-Virus 2009\avp.exe" scan D:\data 
      

  8.   

    用CreatProcess不行,我的代码为:
    char szAppName[_MAX_PATH] = {0};
    strcpy(szAppName,"C:\\Program Files\\Kaspersky Lab\\Kaspersky Anti-Virus 2009\\avp.exe Scan D:\\data");
        char szCmdLine[_MAX_PATH] = {0};
    strcpy(szCmdLine,"Scan D:\\data");
        CreateProcess(szAppName ,szCmdLine, NULL, NULL,TRUE, 0, NULL, NULL, &startupInfo, &ProcessInfo);
      

  9.   

     
    C:\Documents and Settings\Administrator>"C:\Program Files\Kaspersky Lab\Kaspersk 
    y Anti-Virus 2009\avp.exe" scan D:\data  //卡巴窗体不会保留 和我程序是一样的现象
    C:\Documents and Settings\Administrator>"C:\Program Files\Kaspersky Lab\Kaspersk 
    y Anti-Virus 2009\avp" scan D:\data  //卡巴窗体会保留 是我程序想要的
      

  10.   

    CreatProcess 根本没有卡吧窗体弹出
      

  11.   

    不是空格的问题,改成如下也弹不了窗体:
        strcpy(szAppName,"D:\\data\\Tecsun.exe");
        CreateProcess( szAppName,NULL, NULL, NULL,FALSE, 0, NULL, NULL, &startupInfo, &ProcessInfo);
      

  12.   


    你讲的是对的,现在若没空格Tecsun.exe可以启动了。
    但是对于卡巴路径怎么对空格处理?
    C:\Program Files\Kaspersky Lab\Kaspersk 
    y Anti-Virus 2009\avp" 怎么处理空格, 可能涉及到了关键问题了
      

  13.   

    用CreatProcess 调用成功,但还是一闪而过没有保留窗体