代码之家  ›  专栏  ›  技术社区  ›  Cute

如何在C++中创建一个执行EXE的进程?

  •  1
  • Cute  · 技术社区  · 17 年前

    我必须删去一个EXE,在一些驱动器中是可用的,我怎么用C++来做??

    我是这样做的

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    
    void main()
    {
        STARTUPINFO si;
    
        PROCESS_INFORMATION pi;
    
        ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
    
        if(!CreateProcess(L"c:\\DOTNET.exe",NULL,NULL, NULL,FALSE, 0,NULL,NULL,&si,&pi ) ) 
        {
            printf( "CreateProcess failed (%d).\n", GetLastError() );
        }
        else
        {
            printf("Prcess Creation Success");
        }
    
        WaitForSingleObject( pi.hProcess, INFINITE );
        CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread ); 
    
        getch();
    }
    

    但每次它显示进程创建失败,错误代码为2(即找不到指定的路径),但我只将dotnet.exe放在c:\dotnet.exe。

    上面的代码有什么问题。有人能建议我…

    感谢您的帮助。

    提前完成任务。

    3 回复  |  直到 17 年前
        1
  •  1
  •   anno    17 年前

    我刚刚测试了您的代码,它在这里使用:

    if(!CreateProcess(L"C:\\Program Files\\Mozilla Firefox\\firefox.exe",NULL,NULL, NULL,FALSE, 0,NULL,NULL,&si,&pi ) ) 
    

    C++/Win32解决方案的C/Win32代码:

    void ExecuteAndWait (wstring toto)
    {
        STARTUPINFO si = { sizeof(si) };
        PROCESS_INFORMATION  pi;
        vector<TCHAR> V( toto.length() + 1);
        for (int i=0;i< (int) toto.length();i++)
        V[i] = toto[i];
        CreateProcess(NULL, &V[0],0, 0, FALSE, 0, 0, 0, &si, &pi);
        WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    }
    
        2
  •  0
  •   Mel Green    17 年前

    我认为您需要以不同的方式调用CreateProcess()。

    试试这个;

    if (!CreateProcess( NULL, L"C:\\DOTNET.exe", NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi))
    
        3
  •  0
  •   Paul Mitchell    17 年前

    您正在生成Unicode可执行文件吗?改为尝试_t(“c:\\dotnet.exe”)。

    或者您的dotnet.exe是否有一些未找到的依赖dll?