2009-03-29 19 views
0

Kennt jemand den Code oder haben Ideen, wie eine exe mit Visual C++ kick off 2005starten Exe von Visual C++ 2005 dll

Die Umgebung der DLL auf, wenn Windows Mobile ist. Die C# dies mit P zu tun/Invoke

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

// C# -Code .exe Createprocess ("\ Programme \ myprogram \ myprogram.exe.exe", "" zu beginnen, IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr. Null, neues Byte [128], pi);

Der Grund, warum ich es in C++ brauche, ist, weil ich gezwungen bin, eine native DLL zu verwenden, um vor und nach Init-Checks usw. auszuführen, wenn ich ein benutzerdefiniertes cab-Installationsprogramm ausführe.

Ihre Gedanken werden sehr geschätzt. Tony

Antwort

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(); 
} 
0

Wenn Sie eine exe auf dem Gerät bedeuten laufen, dann kein Visual Studio kann es nicht direkt tun. Sie müssen einen benutzerdefinierten Build-Schritt oder Pre-/Post-Build-Schritte einrichten, um eine Anwendung auszuführen, die dies für Sie erledigt. Sie können das WM5 SDK-Codebeispiel prun verwenden (oder ein eigenes erstellen). PRun verwendet RAPI, um die Anwendung auf dem Gerät auszuführen. Daher muss das Gerät über ActiveSync verbunden sein, damit dies funktioniert.

Wenn Sie versuchen, Dinge "automatisch" auf dem Gerät passieren zu lassen (z. B. Komponententests), können Sie sich die device emulator ansehen. Dies kann Ihnen mehr control als versuchen, ein physisches Gerät zu verwenden.

0

Try this:

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

Warum würden Sie das Gewicht eines CString für so etwas nutzen? – ctacke

Verwandte Themen