.exe Datei starten

shader09

Erfahrenes Mitglied
Schönen guten morgen.
Ich hab folgendes Problem, ich will eine .exe Datei aus meinem Programm heraus öffnen.
Habs mit ShellExecute, WinExec ausprobiert, aber bei beiden kommt folgende Fehlermeldung

undeclared identifier

Hab auch eigentlich die header Dateien eingebunden, aber trotzdem kommt diese Fehlermeldung. Ich e mit embedded Visual C++ 4.0 auf WinCE Geräten.
Vielleicht kann mir jemand helfen...

*thx*
 
Code:
BOOL CreateProcess( 
  LPCWSTR lpszImageName, 
  LPCWSTR lpszCmdLine, 
  LPSECURITY_ATTRIBUTES lpsaProcess, 
  LPSECURITY_ATTRIBUTES lpsaThread, 
  BOOL fInheritHandles, 
  DWORD fdwCreate, 
  LPVOID lpvEnvironment, 
  LPWSTR lpszCurDir, 
  LPSTARTUPINFOW lpsiStartInfo, 
  LPPROCESS_INFORMATION lppiProcInfo
);

Sind ja ganz schön viel Parameter, kannst dus mir vielleicht kurz erklären!?
Bin noch nicht so die Leuchte in C


EDIT
So müsste die Anweisung dann aussehen oder!?
Code:
CreateProcess(_T("\\Storage Card\\Prog\\Einstellung.exe"),NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&startupInfo,&processInformation);
Funktionieren tut es aber leider immer noch nicht
 
Zuletzt bearbeitet:
Code:
BOOL CreateProcess( 
  LPCWSTR lpszImageName, 
  LPCWSTR lpszCmdLine, 
  LPSECURITY_ATTRIBUTES lpsaProcess, 
  LPSECURITY_ATTRIBUTES lpsaThread, 
  BOOL fInheritHandles, 
  DWORD fdwCreate, 
  LPVOID lpvEnvironment, 
  LPWSTR lpszCurDir, 
  LPSTARTUPINFOW lpsiStartInfo, 
  LPPROCESS_INFORMATION lppiProcInfo
);

Sind ja ganz schön viel Parameter, kannst dus mir vielleicht kurz erklären!?
Bin noch nicht so die Leuchte in C

am einfachsten ist es wenn du Funktionen erklärt haben willst, die standarderklärung zu benutzen.

dazu einfach im compiler die funktion markieren oder den cursor innerhalb des funktionsnamen zu positionieren und F1 drücken, dann wird die standardhilfe (meistens mit beispielen und verwandten funktionen) aufgerufen.

Grüße, random.
 
dazu einfach im compiler die funktion markieren oder den cursor innerhalb des funktionsnamen zu positionieren und F1 drücken, dann wird die standardhilfe (meistens mit beispielen und verwandten funktionen) aufgerufen.

Hab ich ja gemacht, aber bei embedded is die Hilfe ziemlich mager. Nichts von Beispielen oder so.


EDIT
Wie mach ich das mit GetLastError!?
Wie bekomme ich da den Fehler raus!?
 
Zuletzt bearbeitet:
Hier schau mal, vielleicht ist das was...:

Unds nächste mal bitte zuerst googlen!


http://www.goffconcepts.com/techarticles/development/cpp/createprocess.html hat gesagt.:
Code:
size_t ExecuteProcess(std::wstring FullPathToExe, std::wstring Parameters,
                                 size_t SecondsToWait)
{
     size_t iMyCounter = 0, iReturnVal = 0, iPos = 0;
     DWORD dwExitCode = 0;
     std::wstring sTempStr = L"";

     /* - NOTE - You should check here to see if the exe even exists */

     /* Add a space to the beginning of the Parameters */
     if (Parameters.size() != 0)
     {
          if (Parameters[0] != L' ')
          {
               Parameters.insert(0,L" ");
          }
     }

     /* The first parameter needs to be the exe itself */
     sTempStr = FullPathToExe;
     iPos = sTempStr.find_last_of(L"\\");
     sTempStr.erase(0, iPos +1);
     Parameters = sTempStr.append(Parameters);

     /*
          CreateProcessW can modify Parameters thus we
          allocate needed memory
     */
     wchar_t * pwszParam = new wchar_t[Parameters.size() + 1];
     if (pwszParam == 0)
     {
          return 1;
     }
     const wchar_t* pchrTemp = Parameters.c_str();
     wcscpy_s(pwszParam, Parameters.size() + 1, pchrTemp);

     /* CreateProcess API initialization */
     STARTUPINFOW siStartupInfo;
     PROCESS_INFORMATION piProcessInfo;
     memset(&siStartupInfo, 0, sizeof(siStartupInfo));
     memset(&piProcessInfo, 0, sizeof(piProcessInfo));
     siStartupInfo.cb = sizeof(siStartupInfo);

     if (CreateProcessW(const_cast<LPCWSTR>(FullPathToExe.c_str()),
                                  pwszParam, 0, 0, false,
                                  CREATE_DEFAULT_ERROR_MODE, 0, 0,
                                  &siStartupInfo, &piProcessInfo) != false)
     {
          /* Watch the process. */
          dwExitCode = WaitForSingleObject(piProcessInfo.hProcess,
                                                            (SecondsToWait * 1000));
     }
     else
     {
          /* CreateProcess failed */
          iReturnVal = GetLastError();
     }

     /* Free memory */
     delete[]pwszParam;
     pwszParam = 0;

     /* Release handles */
     CloseHandle(piProcessInfo.hProcess);
     CloseHandle(piProcessInfo.hThread);

     return iReturnVal;
}
 
it CE kenne ich mich nicht aus, aber beim "normalen" Windows sollte es so funktionieren:
C++:
STARTUPINFOW        siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);

BOOL bRet = CreateProcess( NULL,
                          _T("\\Storage Card\\Prog\\Einstellung.exe"),
                          NULL,
                          NULL,
                          FALSE,
                          CREATE_DEFAULT_ERROR_MODE,
                          NULL, 
                          NULL,
                          &startupInfo,
                          &processInformation );
Gruß
MCoder
 
1.
STARTUPINFOW siStartupInfo;
2.
PROCESS_INFORMATION piProcessInfo;
3.
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
4.
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
5.
siStartupInfo.cb = sizeof(siStartupInfo);
6.

7.
BOOL bRet = CreateProcess( NULL,
8.
_T("\\Storage Card\\Prog\\Einstellung.exe"),
9.
NULL,
10.
NULL,
11.
FALSE,
12.
CREATE_DEFAULT_ERROR_MODE,
13.
NULL,
14.
NULL,
15.
&startupInfo,
16.
&processInformation );

Genau so ähnlich hats dann auch geklappt, man muss den Pfad zur Datei als 1sten Parameter schreiben. Danke für die Hilfe
 
Zurück