尝试从我的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();
}
答案 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
失败的结果。