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 に答える