Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > как запустить EXE [C# .NET] из ядра на MFC


Автор: LectorSP 11.5.2007, 17:08
помогите пожалуйста. возникла такая проболем...мне надо запустить написанный мною EXE файл [C# .NET] из кода на С++ (MFC)

MFC Я знаю очень слабо, весьма поверхностоно, ничего не писал. Имел дело с MFC, только когда переписывал некоторый функционал под .NET. если не сложно, приведите пожалуйста пример.   

Автор: zkv 11.5.2007, 17:28
Цитата(LectorSP @  11.5.2007,  17:08 Найти цитируемый пост)
приведите пожалуйста пример.

Код

ShellExecute(NULL, "open", "path_to_exe_file", NULL, NULL, SW_SHOWNORMAL);

Автор: Rapalex 11.5.2007, 17:30
МФЦ тут не причём, винда есть.

Ты CreateProcess пробывал?

Например так:
Код

    STARTUPINFO sStartUp;
    ZeroMemory(&sStartUp, sizeof(STARTUPINFO));
    sStartUp.cb = sizeof(STARTUPINFO);
    sStartUp.dwFlags = STARTF_USESHOWWINDOW;
    sStartUp.wShowWindow = SW_SHOWNORMAL;

    PROCESS_INFORMATION sPI;

    CString strCommand = _T("notepad.exe");
    CreateProcess(
        NULL,                    // lpApplicationName
        strCommand.GetBuffer(),        // lpCommandLine
        NULL,                    // lpProcessAttributes
        NULL,                    // lpThreadAttributes
        FALSE,                    // bInheritHandles
        NORMAL_PRIORITY_CLASS,        // dwCreationFlags
        NULL,                    // lpEnvironment
        NULL,                    // lpCurrentDirectory,
        &sStartUp,                // lpStartupInfo,
        &sPI                    // lpProcessInformation
    );

Автор: LectorSP 11.5.2007, 18:05
не знаю почему, но CreateProcess всегда возвращает FALSE,  ShellExecute() тоже не запускает.

Автор: zkv 11.5.2007, 18:17
Цитата(LectorSP @  11.5.2007,  18:05 Найти цитируемый пост)
не знаю почему, но CreateProcess всегда возвращает FALSE,  ShellExecute() тоже не запускает.

код пожалуйста, про экранирующие слеши в пути не забыли? типа ShellExecute(NULL, "open", "C:\\catalog\\exe_file.exe", NULL, NULL, SW_SHOWNORMAL);

Автор: Любитель 12.5.2007, 00:01
Если апишная функция не срабатывает - всгеда в первую очередь смотрим GetLastError. По-моему, стандартно smile

Автор: LectorSP 14.5.2007, 10:42
Все работает, но такой вопрос... сам EXE фаил работает нормально, но когда его запускаешь через CreateProcess или ShellExecute, он перестает видеть все относительные пути указанные внутри....
может их надо задавать относительно того, откуда вызывается CreateProcess или ShellExecute ?

Автор: zkv 14.5.2007, 11:11
Цитата(LectorSP @  14.5.2007,  10:42 Найти цитируемый пост)
Все работает, но такой вопрос... сам EXE фаил работает нормально, но когда его запускаешь через CreateProcess или ShellExecute, он перестает видеть все относительные пути указанные внутри....
может их надо задавать относительно того, откуда вызывается CreateProcess или ShellExecute ? 

не помню какая точно, но есть функция которая позволяет менять текущую рабочую директорию (вроде так называется)

Автор: Rapalex 14.5.2007, 11:32
У функции CreateProcess есть входной параметр:
Цитата

lpCurrentDirectory 

[in] Pointer to a null-terminated string that specifies the full path to the current directory for the process. The string can also specify a UNC path. 
If this parameter is NULL, the new process will have the same current drive and directory as the calling process. (This feature is provided primarily for shells that need to start an application and specify its initial drive and working directory.)


Походу это оно и есть.

Автор: LectorSP 14.5.2007, 12:57
Всем огромное спасибо. Все работает так как надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)