3

一直在尝试从我的 Visual Studio C++ 应用程序中调用 Truecrypt exe,但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();
}
4

2 回答 2

3

好的,在尝试了文档中的很多标志之后终于破解了它。希望它对其他挣扎于它的人有所帮助。

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

于 2013-06-06T03:18:31.983 回答
0

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

STARTUPINFO si = {sizeof(STARTUPINFO)};

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

于 2013-06-04T12:07:58.073 回答