如何在c ++中创建一个执行exe的进程?

时间:2009-07-23 15:51:05

标签: c++ visual-c++

我必须在一些驱动程序中使用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。

上面的代码有什么问题。任何人都建议我......

非常感谢任何帮助..

Thabks提前。

3 个答案:

答案 0 :(得分:1)

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

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);
}

答案 1 :(得分:0)

您是否正在构建Unicode可执行文件?请尝试_T(“C:\\ DOTNET.exe”)。

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

答案 2 :(得分:0)

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

试试这个;

if (!CreateProcess( NULL, L"C:\\DOTNET.exe", NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi))