从 Visual C++ 启动 .exe 2005 动态链接库

发布于 2024-07-16 13:51:49 字数 804 浏览 3 评论 0原文

有谁知道代码或有关于如何使用 Visual C++ 2005 启动 .exe 的想法吗?

如果是 Windows Mobile,则为 dll 所在的环境。 使用 P/Invoke 执行此操作的 C# 是

[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# Code to start .exe

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

我在 C++ 中需要它的原因是因为我被迫使用本机 dll 来执行初始化前和初始化后检查等运行自定义 cab 安装程序。

非常感谢您的想法。 托尼

Does anyone know the code or have ideas on how to kick off an .exe using Visual C++ 2005?

The environment the dll is on if Windows Mobile. The C# to do this using P/Invoke is

[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# Code to start .exe

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

The reason I need it in C++ is because I am forced to use a native dll to carry out pre and post intit checks etc when running a custom cab installer.

Your thoughts are much appreciated.
Tony

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

坐在坟头思考人生 2024-07-23 13:51:49
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();
}
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();
}
虚拟世界 2024-07-23 13:51:49

尝试这个:

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;    
}

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;    
}
残疾 2024-07-23 13:51:49

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

如果您尝试在设备上“自动”进行某些操作(例如单元测试),您可能需要考虑运行 设备模拟器。 与尝试使用物理设备相比,这可能会让您控制

If you mean running an exe on the device, then no visual studio can't do it directly. You need to setup a custom build step or pre/post build steps to run a application that will do it for you. You can use the WM5 SDK code example prun (or create your own). PRun uses RAPI to run the application on the device, so the device needs to be connected through ActiveSync for this to work.

If you are trying to make stuff "automatically" happen on the device (e.g. unit tests), you may like to look into running the device emulator. This may get you more control than trying to use a physical device.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文