使用CreateProcess调用exe文件



一直试图调用Truecrypt exe从我的Visual Studio c++应用程序,但CreateProcess只是不工作。GetLastError()表示127
目标是调用exe 而不显示命令窗口。请帮助。我试着搜索并阅读CreateProcess参数解释。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include<Windows.h>
int main( void )
{
    HANDLE StdInHandles[2]; 
    HANDLE StdOutHandles[2]; 
    HANDLE StdErrHandles[2]; 
    CreatePipe(&StdInHandles[0], &StdInHandles[1], NULL, 4096); 
    CreatePipe(&StdOutHandles[0], &StdOutHandles[1], NULL, 4096); 
    CreatePipe(&StdErrHandles[0], &StdErrHandles[1], NULL, 4096); 
    STARTUPINFO si;   memset(&si, 0, sizeof(si));  // zero out
    si.dwFlags =  STARTF_USESTDHANDLES; 
    si.hStdInput = StdInHandles[0];  // read handle
    si.hStdOutput = StdOutHandles[1];  // write handle 
    si.hStdError = StdErrHandles[1];  // write handle 
    PROCESS_INFORMATION pi; 
    std::cout<< CreateProcess(""C:\Program Files\TrueCrypt\cmd.exe\TrueCrypt.exe"", " //b" , NULL, NULL, FALSE, CREATE_NO_WINDOW , NULL, NULL, &si, &pi)<< "n" << GetLastError() << "n";
    std::cin.get();
}

好的,所以在尝试了文档中的许多标志之后,最终破解了它。希望这篇文章能对那些正在为之挣扎的人有所帮助。

#include<Windows.h>
int main()
{
    STARTUPINFO si = { sizeof(STARTUPINFO) };
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    PROCESS_INFORMATION pi;
    CreateProcess("C:\Program Files\Nero\Nero 7\Core\nero.exe", NULL , NULL, NULL, FALSE, CREATE_NO_WINDOW , NULL, NULL, &si, &pi);
}//main

请注意,Nero的GUI将显示,但一些其他的exe,你可能会尝试启动,但窗口将不可见。你可以在TaskManager中看到应用程序

最可能的原因是您的STARTUPINFO结构。至少,您需要将cb成员设置为sizeof(STARTUPINFO)。我喜欢这样做:

STARTUPINFO si = {sizeof(STARTUPINFO)};

同样,您没有检查CreatePipe的结果是否失败。

相关内容

  • 没有找到相关文章

最新更新