【问题标题】:How can I programmatically detect if MSMQ has been installed on the current system?如何以编程方式检测当前系统上是否已安装 MSMQ?
【发布时间】:2011-05-14 13:25:14
【问题描述】:

如何以编程方式检测当前系统上是否已安装 MSMQ?

我正在使用 C++,但其他语言的答案仍然会有所帮助。

(VS2008、WinXP 及以上)

【问题讨论】:

    标签: c++ msmq


    【解决方案1】:

    您可以简单地要求 COM 创建MSMQQueueInfo 对象的实例。如果成功,则说明 MSMQ 已安装。

    #include <atlbase.h>
    #include <mqoai.h>
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
        auto error = CoInitializeEx(0, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
    
        if (FAILED(error))
        {
            wcout << L"You've got bigger problems" << endl;
        }
        else
        {
            CComPtr<IMSMQQueueInfo> info;
    
            error = info.CoCreateInstance(__uuidof(MSMQQueueInfo));
    
            if (SUCCEEDED(error))
            {
                wcout << L"MSMQ is installed" << endl;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      有一个指向 C# here 的指针 - 调用一个方法来枚举队列并检查错误代码。

      我现在的做法是 尝试抓住 'GetPrivateQueuesByMachine' 方法, 这将引发异常 'MessageQueueErrorCode.ServiceNotAvailable' 错误代码。

      另一种选择是安装 MSMQ WMI Provider here 并在服务器上查询 MSMQ 对象实例。

      【讨论】:

        【解决方案3】:

        您还可以检查注册表项是否存在:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ。如果密钥存在,则安装 MSMQ。

        【讨论】:

          【解决方案4】:
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-24
          • 2010-10-19
          • 2014-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多