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++ 中需要它的原因是因为在运行自定义 cab 安装程序时,我被迫使用本机 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 回答
0

如果您的意思是在设备上运行 exe,那么没有任何 Visual Studio 无法直接执行此操作。您需要设置自定义构建步骤或预/后构建步骤来运行将为您执行此操作的应用程序。您可以使用 WM5 SDK 代码示例prun(或创建您自己的)。PRun 使用RAPI在设备上运行应用程序,因此需要通过 ActiveSync 连接设备才能工作。

如果您试图在设备上“自动”发生某些事情(例如单元测试),您可能希望查看运行设备模拟器。与尝试使用物理设备相比,这可能会让您获得更多控制权。

于 2009-03-29T18:21:48.837 回答