[Gelöst] Externes Programm öffnen und Parameter übergeben



  • Hallöchen,

    ich möchte ein anderes Programm öffnen und dabei einen Parameter übergeben.

    Programm Authentifizierung.exe

    int main(int argc, char * argv[])
    {
    	cout << argc;
    	char Passwort[] = "4";
    
    	if(!strcmp(argv[1], Passwort))
    	{
    		cout << "0" << endl;
    	} else {
    		cout << "1" << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    Wenn man dieses Programm jetzt über die CMD aufruft (Authentifizierung.exe 1) dann gibt es 1 zurück, wenn man das richtige Passwort nutzt 0.

    Nun möchte ich dieses geschriebene Programm mit einem anderen Programm öffnen. Das sieht aktuell so aus.

    STARTUPINFOA si;
    	PROCESS_INFORMATION pi;
    
    	ZeroMemory( &si, sizeof(si) );
    	si.cb = sizeof(si);
    	ZeroMemory( &pi, sizeof(pi) );
    	if (!CreateProcessA("C:\\Users\\Justin\\Documents\\visual studio 2012\\Projects\\Authentifizierung\\Debug\\Authentifizierung.exe", "4", NULL, NULL, FALSE, CREATE_NEW_CONSOLE,NULL, NULL, &si, &pi))
    		{
    			cout << "Unable to execute.";
    		}
    
    }
    

    Das führt jedoch immer dazu, dass das "Programm funktioniert nicht mehr"

    Über Hilfe würde ich mich sehr freuen 😉


  • Mod

    Nirndor schrieb:

    Wenn man dieses Programm jetzt über die CMD aufruft (Authentifizierung.exe 1) dann gibt es 1 zurück, wenn man das richtige Passwort nutzt 0.

    Kleiner, aber wichtiger Unterschied: Dein Programm gibt "0" oder "1" aus, aber es gibt immer 0 zurück. Das ist, was das return 0; in Zeile 14 macht. Ausgabe und Rückgabe eines Programms sind ganz unterschiedliche Dinge.

    Das führt jedoch immer dazu, dass das "Programm funktioniert nicht mehr"

    Dann wirst du wohl einen Fehler gemacht haben 😉 . Kannst du ein minimales, compilierbares Beispiel produzieren? Vielleicht (sogar wahrscheinlich) liegt es gar nicht direkt an deinem CreateProcessA, sondern da dran, dass du irgendwas bei deinem Pointergefrickel falsch gemacht hast.



  • Ja das ist natürlich klar, dass er 0 zurück gibt. Ich meinte als Nachricht gibt er diese Nachricht zurück 😛

    Dieses Programm führst du aus, und das soll das Authentifizierungs-Programm öffnen und den Parameter 4 übergeben. Wenn das funktionieren würde, dann müsste sich das Programm Authentifizierung öffnen, wo dann eine 0 als Nachricht geschrieben wird.

    #include <iostream>
    #include <Windows.h>
    #include <string>
    
    using namespace std;
    
    void test()
    {
    	STARTUPINFOA si;
    	PROCESS_INFORMATION pi;
    
    	ZeroMemory( &si, sizeof(si) );
    	si.cb = sizeof(si);
    	ZeroMemory( &pi, sizeof(pi) );
    	if (!CreateProcessA("C:\\Users\\Justin\\Documents\\visual studio 2012\\Projects\\Authentifizierung\\Debug\\Authentifizierung.exe", "4", NULL, NULL, FALSE, CREATE_NEW_CONSOLE,NULL, NULL, &si, &pi))
    		{
    			cout << "Unable to execute.";
    		}
    
    }
    
    int main()
    {
    	test();
    	system("pause");
    	return 0;
    
    }
    

    Das ist das Authentifizierungs-Programm

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char * argv[])
    {
    
    	cout << argc;
    
    	char Passwort[] = "4";
    
    	if(!strcmp(argv[1], Passwort))
    	{
    		cout << "0" << endl;
    	} else {
    		cout << "1" << endl;
    	}
    
    	system("pause");
    	return 0;
    
    }
    

    Vielen Dank für die Hilfe

    EDIT:

    Habe es nun wiefolgt einfacher gelöst...

    string pfad = "C:\\Authentifizierung.exe ";

    for (int i = 0; i <= 5; i++)
    {
    string Zahl = to_string(i);
    string Ende = pfad + Zahl ;
    system(Ende.c_str());
    }


Anmelden zum Antworten