Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Anwendung starten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.03.2006, 15:01 Uhr
Kampfkobold



Hallo,

sry für die folgenden absoluten Noobfragen

Also ich bin normalerweise ein VB-Progger, also in euren Augen somit wahrscheinlich kein progger aber egal...ich brauch ne Möglichkeit ne Datei zum laufen zu bringen, welche zumindest auf XP ohne jegliche Vorinstallation einer dll oder eines Frameworks, so der Fall bei VB6 oder VB.net, laufen soll! Ich denk mir, das geht mit C++...ich hab den Compiler Dev-Cpp!

Jetzt hab ich mir gedacht ich könnte meine Dateien in Form einer selbstextrahierenden Datei weitergeben, welche verschiedene dlls extrahieren soll, welche für mein eigentliches Setupprogramm von Nöten sind, dann soll eine Anwendung gestartet werde, welche die dll's registriert...ganz einfach durch den Befehl "regsvr32 "Programmname"" und im Anschluss soll mein Installer ausgeführt werden. Dieses Übergangsprogramm wollte ich mit C++ verwirklichen, hab einiges über Shellexecute, WinExec, etc., etc. rausgefunden...aber nix ging...wie kann ich ganz einfach die Console aufrufen und dann eine Anwendung (regsvr32) mit Parametern öffnen, eine weitere Datei starten und dann das eigene wieder schließen?

Könnt ihr mir bitte helfen, bin ein absoluter Anfänger in C++

Gruß und danke,
Kampfkobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.03.2006, 15:10 Uhr
Spacelord
Hoffnungsloser Fall


Hallo,
schau dir mal CreateProcess an.
Und keine Bange vor den 1000 Parametern....90% davon kannst du mit 0 besetzen .

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.03.2006, 15:13 Uhr
~Kampfkobold
Gast


Hi,

danke für deine Antwort!

Ich habs mir schon angeguckt, nur weiß ich nicht, wo ich die Deklaration oder wie man das in C++ nennt, hinsetzt und dann kam, dass nach Main ein dim kommen muss...und sowas versteh ich nicht - also den Aufbau!

Gruß,
Kampfkobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.03.2006, 15:55 Uhr
xXx
Devil


hmm das ist rel einfach Ich vermute mal das du ne Win32 Anwendung schreibst, also nix anderse als ne Windows Fenster Anwendung (nicht Konsole ).

Dann mach folgendes... wobei de dir Parameter von CreateProcess bitte selbst anchguckst

C++:
int __stdcall WinMain (::HINSTANCE__* hInstance, ::HINSTANCE__* hPrevInstance, char* pcCmd, int iShow)
{
    // Wenn de nen Fenster haben willst, musst de hier das erstmal erstellen ;) Ansonnsten machen wir soweiter´...
    TCHAR szCmdline[] = TEXT("\"regsvr32 "Programmname"");
    ::CreateProcess(NULL, szCmdline, ...)

    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.03.2006, 16:15 Uhr
Kampfkobold



Vielen Dank....für deinen Versuch ;-)

Es klappt nicht, wegen folgenden VIELEN Fehlermeldungen:

[Warning] `__stdcall__' attribute only applies to function types
`::HINSTANCE__' has not been declared
`hInstance' was not declared in this scope
`::HINSTANCE__' has not been declared
`hPrevInstance' was not declared in this scope

Und so gehts grad weiter. Insgesamt ca. nochaml soviel Fehler...was ist aber daran falsch? Genau solche assi Fehler kamen bei meinen Versuchen zusammen....

Gruß,
Kampfkobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.03.2006, 19:14 Uhr
xXx
Devil


k ... das darf normal net sein... hast du zufällig die <windows.h> nicht includiert?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.03.2006, 19:39 Uhr
Kampfkobold



ähmm...das kann gut sein!

Bin jetzt auf der Suche nach CreateProcess auf http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_processes.asp gekommen...und hab mir folgenden Code übernommen:


C++:
#include <windows.h>
#include <stdio.h>

//void main( VOID )
int __stdcall WinMain (::HINSTANCE__* hInstance, ::HINSTANCE__* hPrevInstance, char* pcCmd, int iShow)
{
{
    TCHAR szCmdline[]=TEXT("regsvr32 c:\\Blabla\\DTA_Access2_0.dll");
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process.
    if( !CreateProcess( NULL,   // No module name (use command line)
        szCmdline,      // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    )
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return 0;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles.
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}



Jetzt kommen noch 3 Zeilen Fehler...
main2.cpp `int WinMain(HINSTANCE__*, HINSTANCE__*, char*, int)':
main2.cpp expected `}' at end of input
Makefile.win [Build Error] [main2.o] Error 1

Der 2. wird aktiv angezeigt und zeigt auf die letzte Zeile!
könnt ihr mir hier noch weiterhelfen?

Gruß,
Kampfkobold

Dieser Post wurde am 18.03.2006 um 22:42 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.03.2006, 20:10 Uhr
xXx
Devil



C++:
#include <windows.h>
#include <stdio.h>

//void main( VOID )
int __stdcall WinMain (::HINSTANCE__* hInstance, ::HINSTANCE__* hPrevInstance, char* pcCmd, int iShow)
{
    TCHAR szCmdline[]=TEXT("regsvr32 c:\\Blabla\\DTA_Access2_0.dll");
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    // Start the child process.
    if( !CreateProcess(NULL, szCmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ))
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return 0;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles.
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.03.2006, 20:30 Uhr
Kampfkobold



Jaaaaaa...sehr gut!! Es läuft!

Vielen Dank!!

Warst mir ne seeeehr große Hilfe!!

Kampfkobold
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: