0

コードを知っている人、または Visual C++ 2005 を使用して .exe を開始する方法についてアイデアを持っている人はいますか?

Windows Mobile の場合、dll が存在する環境。これを行う C# は次のとおりP/Invokeです。

[DllImport("coredll.Dll")]
private static extern int CreateProcess(string strImageName, string strCmdLine, IntPtr pProcessAttributes, IntPtr pThreadAttributes , int bInheritsHandle, int dwCreationFlags, IntPtr pEnvironment, IntPtr pCurrentDir, Byte[] bArray, ProcessInfo oProc); 

c# .exe を起動するコード

CreateProcess("\\Program Files\\myprogram\\myprogram.exe.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, new Byte[128], pi); 

C++ でそれが必要な理由は、カスタム キャブ インストーラーを実行するときにネイティブ dll を使用して事前および事後 intit チェックなどを実行する必要があるためです。

あなたの考えは大歓迎です。トニー

4

3 に答える 3

1

これを試して:

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;    
}
于 2009-04-01T15:41:07.497 に答える
1
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();
}
于 2009-03-29T16:40:34.850 に答える