Запуск .exe из Visual C ++ 2005 DLL - PullRequest
0 голосов
/ 29 марта 2009

Кто-нибудь знает код или есть идеи о том, как запустить exe с помощью Visual C ++ 2005.

Среда, в которой находится dll, если Windows Mobile. C # для этого с помощью P / Invoke:

[DllImport ( "coredll.Dll")] закрытый статический extern int CreateProcess (строка strImageName, строка strCmdLine, IntPtr pProcessAttributes, IntPtr pThreadAttributes, int bInheritsHandle, int dwCreationFlags, IntPtr pEnvironment, IntPtr pCurrentDir, Byte [] bProc, Process);

// c # Код для запуска .exe CreateProcess ("\ Program Files \ myprogram \ myprogram.exe.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, новый байт [128], пи);

Причина, по которой мне это нужно в C ++, заключается в том, что я вынужден использовать нативный dll для выполнения проверок pre, post и intit и т. Д. При запуске специального установщика cab.

Ваши мысли очень ценятся. Tony

Ответы [ 3 ]

1 голос
/ 29 марта 2009
PROCESS_INFORMATION ProcessInfo = { 0 };

if (CreateProcess(ImagePath,
                  NULL,
                  NULL,
                  NULL,
                  FALSE,
                  0,
                  NULL,
                  NULL,
                  NULL,
                  &ProcessInfo))
{
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
}
else
{
    return GetLastError();
}
0 голосов
/ 01 апреля 2009

Попробуйте это:

BOOL RunExe(CString strFile)
{
    WIN32_FIND_DATA fd;
    HANDLE      hFind;
    BOOL        bFind;

    hFind = FindFirstFile(strFile, &fd);
    bFind = (hFind != INVALID_HANDLE_VALUE);

    if(bFind)
    {
    if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
    {
        SHELLEXECUTEINFO info;
        ZeroMemory(&info, sizeof(info));
        info.cbSize = sizeof(info);
        info.fMask = SEE_MASK_NOCLOSEPROCESS;
        info.hwnd = 0;
        info.lpVerb = _T("open");
        info.lpFile = strFile;
        info.lpParameters = NULL;
        info.lpDirectory = NULL;
        info.nShow = SW_SHOW;
        info.hInstApp = NULL;
        ShellExecuteEx(&info);  
    }
    else
        bFind = FALSE;
    }

    FindClose(hFind);

    return bFind;    
}
0 голосов
/ 29 марта 2009

Если вы имеете в виду запуск exe на устройстве, то ни одна Visual Studio не сможет сделать это напрямую. Вам нужно настроить пользовательский шаг сборки или этапы до / после сборки, чтобы запустить приложение, которое сделает это за вас. Вы можете использовать пример кода WM5 SDK prun (или создать свой собственный). PRun использует RAPI для запуска приложения на устройстве, поэтому устройство должно быть подключено через ActiveSync, чтобы это работало.

Если вы пытаетесь заставить вещи «автоматически» происходить на устройстве (например, модульные тесты), вам может потребоваться запустить эмулятор устройства . Это может дать вам больше контроля , чем пытаться использовать физическое устройство.

...