一直试图从我的Visual Studio C++应用程序调用Truecrypt exe,但CreateProcess
只是不工作。 GetLastError()
显示127
。
其目标是调用exe 而不显示命令窗口。请帮忙。我试过搜索并阅读CreateProcess parameter explanation。使用CreateProcess调用exe文件?
#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();
}
'CreatePipe'工作正常。它们返回1.设置'STARTUPINFO'的大小是在'memset(&si,0,sizeof(si));'中完成的。我也尝试过你的技术,但它不起作用。需要帮忙。 – Nav
@Nav:不,您的memset()行会将整个结构清零。斯科特告诉你,第一个成员(cb)需要自己包含sizeof(STARTUPINFO)。 –
@Drew:我在memset后注释了他的代码。仍然没有工作。 – Nav