2013-06-04 136 views
2

一直試圖從我的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(); 
} 

回答

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的圖形用戶界面將顯示出來,但其他一些exe文件的,你可以嘗試將啓動,但窗口將不可見。儘管你可以在TaskManager中看到應用程序。

0

最可能的原因是你的STARTUPINFO結構。至少,您需要將cb成員設置爲sizeof(STARTUPINFO)。以下是我喜歡做的事是:

STARTUPINFO si = {sizeof(STARTUPINFO)}; 

而且,你不檢查CreatePipe失敗的結果。

+0

'CreatePipe'工作正常。它們返回1.設置'STARTUPINFO'的大小是在'memset(&si,0,sizeof(si));'中完成的。我也嘗試過你的技術,但它不起作用。需要幫忙。 – Nav

+0

@Nav:不,您的memset()行會將整個結構清零。斯科特告訴你,第一個成員(cb)需要自己包含sizeof(STARTUPINFO)。 –

+0

@Drew:我在memset後註釋了他的代碼。仍然沒有工作。 – Nav

相關問題