Estado tratando de invocar el Truecrypt exe de mi Visual Studio C++ aplicación, pero CreateProcess no está funcionando. GetLastError() muestra 127.

El objetivo es invocar el exe sin mostrar la ventana de comandos. Por favor, ayudar. He tratado de buscar y también la lectura de la CreateProcess parámetro explicación.

#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();
}
InformationsquelleAutor Nav | 2013-06-04

2 Comentarios

  1. 3

    Ok, así que agrietado, finalmente, después de probar un montón de banderas de la documentación. Espero que sea útil para cualquier persona que está luchando con él.

    #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

    Nota que Nero interfaz gráfica de usuario se mostrará, pero algunos otros exe que usted puede tratar de empezar, pero la ventana no será visible. Usted será capaz de ver la aplicación en el administrador de tareas, aunque.

  2. 0

    La causa más probable es la STARTUPINFO struct. Como mínimo, es necesario establecer el cb miembro sizeof(STARTUPINFO). He aquí cómo me gustaría hacerlo:

    STARTUPINFO si = {sizeof(STARTUPINFO)};

    También, no estás comprobando los resultados de CreatePipe para el fracaso.

    • CreatePipe está trabajando bien. Devuelve 1. Ajuste el tamaño de STARTUPINFO que se está haciendo en memset(&si, 0, sizeof(si));. Traté de tu técnica, pero no está funcionando. Necesita ayuda.
    • No, su memset() de la línea de ceros a cabo la totalidad de la estructura. Scott dice que el primer miembro (cb) debe contener en sí sizeof(STARTUPINFO).
    • Yo había probado su código después de comentar memset. Aún no funciona.
    • Bien, así que con el código original que yo había publicado, funcionó cuando lo usé como este: CreateProcess("C:\\Program Files\\Nero\\Nero 7\\Core\\nero.exe", NULL , NULL, NULL, FALSE, CREATE_NEW_CONSOLE , NULL, NULL, &si, &pi);. Pero la ventana de comandos todavía está siendo creado cuando yo uso CreateProcess. No puede deshacerse de él, incluso si yo uso CREATE_NO_WINDOW. Ayuda!!!

Dejar respuesta

Please enter your comment!
Please enter your name here