一直试图调用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
的结果是否失败。