【问题标题】:CreateMutex and ActiveXCreateMutex 和 ActiveX
【发布时间】:2011-08-18 15:52:09
【问题描述】:

我正在使用 Qt 开发 Internet Explorer ActiveX 插件,并尝试让安装程序在继续之前确保插件未运行。解决此问题的标准方法是在应用程序中创建一个命名互斥体并尝试在安装程序中打开它。

当构建为独立的 .exe 时,这可以正常工作,但是当插件 DLL 由 idc.exe(注册服务器或处理类型库)或 IE 本身(在添加针对 argv[0] 的测试之后)加载时跳过 CreateMutex 进行 idc 运行),CreateMutex 调用崩溃。

我是这样称呼它的:

CreateMutex((LPSECURITY_ATTRIBUTES)MUTEX_ALL_ACCESS, FALSE, "mutex_name_here");

在 ActiveX 服务器的上下文中运行时是否会失败,但在独立运行时可以正常工作?我这里还有什么遗漏的吗?

【问题讨论】:

  • 对这些演员放轻松。他们只让你闭嘴告诉你你做错了编译器。它并没有阻止你做错事。
  • 是的。这就是我不理解我正在使用的功能并随机使用谷歌结果的结果。

标签: windows winapi activex mutex


【解决方案1】:

CreateMutex() 的第一个参数是指向 SECURITY_ATTRIBUTES 结构的指针(其中包含指向安全描述符的指针);它不是一组请求的访问权限位,而是您传入的。我不确定为什么这在独立应用程序中会更好。

您可能希望为第一个参数传递 NULL,以便使用默认安全描述符创建互斥锁。

所需访问位将传递给OpenMutex()

【讨论】:

  • 我明白了——这取自谷歌的结果(否则我们使用 Qt 线程原语)。是否可以从其他进程访问具有默认安全选项的互斥锁?
  • 默认访问权限来自创建者的令牌,因此传入 NULL 将允许来自同一用户拥有的任何其他进程的访问权限。
猜你喜欢
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2014-08-02
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多