【问题标题】:How to open MFC application from only another MFC application [closed]如何仅从另一个 MFC 应用程序打开 MFC 应用程序 [关闭]
【发布时间】:2017-05-15 03:38:40
【问题描述】:

我有MFC app A,现在想创建MFC app B,B必须从A打开,不能直接打开。我该怎么做?

请帮忙,非常感谢。

【问题讨论】:

  • B must be opened from A 是什么意思?您的意思是 A 必须在 A 运行后将 B 作为单独的程序启动吗?请看CreateProcess()
  • B 必须是单独的应用程序?也许你创建A加载的B.dll就足够了?
  • 在应用程序 A 中,我们有一个按钮,可以将应用程序 B 作为单独的应用程序打开。但是我们阻止用户通过直接打开exe文件来打开应用程序B。
  • @Danie 在应用 A 的命令行上使用超级秘密开关启动应用 B。在应用 B 中检查超级秘密开关是否在命令留置权上。如果是,那么它是由应用程序启动的,您可以继续,如果不是则退出,这意味着某些用户已经直接启动了.exe。
  • 实际上想要达到什么目的?请阅读:The XY Problem.

标签: c++ visual-studio-2010 mfc


【解决方案1】:

从您的应用程序运行另一个应用程序就像调用一样简单:

STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);
}

正如 Michael Walz 所建议的,您可以使用特殊(秘密)命令行选项来防止用户直接运行应用程序。

【讨论】:

  • 除非用户知道进程监视器... :-)
  • 只需调用WaitForSingleObject 将阻塞消息队列。但这可能没问题,这取决于OP 实际上想要做什么。
  • lpApplicationNamelpCommandLine 都传递给 CreateProcess 在绝大多数情况下是错误的解决方案。根据您是否需要传递命令行参数,选择其中一个。
  • @IInspectable 谢谢。接得好。我已经相应地更新了答案。
  • @Michael Walz。没错,但我假设 Danie 熟悉 WaitForSingleObject 和 Win API。
猜你喜欢
  • 2011-03-07
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多