【问题标题】:win32 API for running other exe用于运行其他 exe 的 win32 API
【发布时间】:2011-08-06 08:59:49
【问题描述】:

我想知道以编程方式运行 regsvr32 的 win32 API。

我有一个应用程序,我可以通过它与 COM 端口设备进行通信。但是为了实现通信,我必须使用regsvr32.exe注册MSCOMM32.ocx,但是现在我想在我的代码中添加这个设置。这样就不需要手动运行regsvr了。

【问题讨论】:

  • 它被称为安装程序。您还需要部署 mscomm32.ocx,它不包含在 Windows 中。你不能把它和你的程序一起复制,你会破坏其他程序,因为它是一个 COM 服务器。

标签: winapi api


【解决方案1】:

Windows CreateProcess API 调用就是您要查找的内容:http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx

【讨论】:

  • 这不是swapnil问题的正确解决方案。它可能很好地回答了直接问题,但 swapnil 提出的解决方案是不正确的。
【解决方案2】:

您可以使用 win32 api 调用的组合来做到这一点:

  • Lo​​adLibrary() 加载 Dll
  • GetProcAddress() 获取 DllRegisterServer() 函数的地址
  • 如果 GetProcAddress 找到该函数,调用它来注册 Dll。

这里解释DllRegisterServer函数:MSDN: DllRegisterServer Entry Point

【讨论】:

  • 很好的答案,但由于他们使用的是 mscomm32.ocx,我希望他们也在使用 VB6,它(本机)不支持按地址调用函数。
【解决方案3】:

您已经在问题标题中添加了answer

至于注册 DLL,我认为您使用的是 VB6,而您无法(轻松)使用 register it directly

注册它的正确方法是将其作为安装程序的一部分进行。
在应用程序中执行此操作为时已晚,因为您(很可能)通常不具备注册它所需的管理员权限。

要让用户以管理员身份运行它,您可以使用ShellExecute() 并将“runas”作为动词传递,“regsvr32.exe”和 mscomm32.ocx 的路径作为文件和参数。
对于 VB6:

  ShellExecute 0, "runas", "regsvr32.exe", """c:\blah.dll""", "c:\", 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多