System.NullReferenceException对象引用未设置为实例

时间:2020-04-15 22:56:21

标签: c++

我是C ++的初学者。在我的代码中,我试图获取计算机上安装的更新的列表。

在我的机器1中,我正在使用Windows 7,并且代码运行正常。但是在同样使用Windows 7的机器2中,也会出现错误。

我不太了解实际需要修复什么或如何修复。

我的程序停止使用以下代码,并显示此错误:

未处理的异常系统。NullReferenceException对象引用未设置为实例

try
{
    HRESULT hr;
    hr = CoInitialize(NULL);

    IUpdateSession* iUpdate;
    IUpdateSearcher* searcher;
    ISearchResult* results;
    BSTR criteria = SysAllocString(L"IsInstalled=0 or IsHidden=1 or IsPresent=1");

    hr = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (LPVOID*)&iUpdate);
    hr = iUpdate->CreateUpdateSearcher(&searcher);

    //wcout << L"Searching for updates ..." << endl;
    hr = searcher->Search(criteria, &results);
    SysFreeString(criteria);

    switch (hr)
    {
    case S_OK:
        //wcout << L"List of applicable items on the machine:" << endl;
        break;
    case WU_E_LEGACYSERVER:
        wcout << L"No server selection enabled" << endl;

    case WU_E_INVALID_CRITERIA:
        wcout << L"Invalid search criteria" << endl;

    }

    IUpdateCollection *updateList;
    IUpdate *updateItem;
    LONG updateSize = 0;
    LONG totalKB = 0;
    results->get_Updates(&updateList);
    updateList->get_Count(&updateSize);

    if (updateSize == 0)
    {
        //wcout << L"No updates found" << endl;
    }

    for (LONG i = 0; i < updateSize; i++)
    {
        IStringCollection *KBCollection;
        BSTR updateName;
        LONG KBCount;
        updateList->get_Item(i, &updateItem);
        updateItem->get_Title(&updateName);
        USES_CONVERSION;
        //outputFile << W2A(CString(updateName)) << " --- ";
        updateItem->get_KBArticleIDs(&KBCollection);
        KBCollection->get_Count(&KBCount);

        for (int i = 0; i<KBCount; i++)
        {
            BSTR KBValue;
            totalKB += 1;
            KBCollection->get_Item(i, &KBValue);
            USES_CONVERSION;

            //std::string strk = streamkb.str();

            file << "{" << endl;
            std::stringstream ss;
            ss << W2A(CString("KB")) << W2A(CString(KBValue));
            std::string s = ss.str();
            list2.push_back(s);

            file << "\"Correctif" << totalKB << "\": \"" << W2A(CString("KB")) << W2A(CString(KBValue)) << "\"" << endl;
            file << "}," << endl;

        }

    }

    ::CoUninitialize();
}
catch (const std::exception & ex)
{

}

0 个答案:

没有答案