使用CreateProcess来调用exe文件?

时间:2013-06-04 11:54:32

标签: visual-c++ createprocess truecrypt

尝试从我的Visual Studio C ++应用程序调用Truecrypt exe,但CreateProcess无效。 GetLastError()显示127 目标是在不显示命令窗口的情况下调用exe 。请帮忙。我试过搜索并阅读CreateProcess parameter explanation

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

2 个答案:

答案 0 :(得分:2)

好的,在从文档中尝试了很多标志后,最终破解了它。希望它能帮助其他任何与之抗争的人。

#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中看到该应用程序。

答案 1 :(得分:0)

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

STARTUPINFO si = {sizeof(STARTUPINFO)};

另外,您没有检查CreatePipe失败的结果。