システムwiki

Windows Update APIは、 Windows 10 累積更新の空のダウンロードURLを提供します

knkumar 受付中 最終更新日:2022-06-20 02:45

WUAPIを使用してMicrosoftUpdateカタログに対して更新をScanするC++プログラムを使用しています.かなり長い間問題なく動作していましたが、最近、特定のKB記事がダウンロードURLを提供していないことがわかりました.これらは特に累積的な更新です.

同じKB記事のMicrosoftUpdateCatalogを確認しましたが、そこから利用可能な更新プログラムを見つけてダウンロードできます.これについて助けてください.

クライアントオペレーティングシステム:Windows 10version21H1(OSBuild19043.1586)

コードスニペット:

#include
#include
#include
int _tmain(int argc、_TCHAR* argv [])
{{
CoInitialize(NULL);
IUpdateSession* lpUpdateSession;
HRESULT hr= CoCreateInstance(CLSID_UpdateSession、NULL、CLSCTX_INPROC_SERVER、IID_IUpdateSession、(LPVOID*)&lpUpdateSession);
if(hr!= S_OK)
{{
_tprintf(_T( "%s-0x%X\n")、_T("更新セッションの作成に失敗しました.\n\n")、hr);
-1を返します.
}
IUpdateSearcher* lpUpdateSearcher;
if((hr= lpUpdateSession->CreateUpdateSearcher(&lpUpdateSearcher))!= S_OK)
{{
_tprintf(_T( "サーチャーの作成に失敗しました0x%X\n\n")、hr);
-1を返します.
}
IUpdateServiceManager* lpUpdateServiceManager;
if((hr= CoCreateInstance(CLSID_UpdateServiceManager、NULL、CLSCTX_INPROC_SERVER、IID_IUpdateServiceManager、(LPVOID*)&lpUpdateServiceManager))!= S_OK)
{{
_tprintf(_T( "Created Update service Manager failed 0x%X\n\n")、hr);
-1を返します.
}
lpUpdateSession->put_ClientApplicationID(bstr_t( "MyApp"));
IUpdateSearcher* pSearcher;
hr= lpUpdateSession->CreateUpdateSearcher(&pSearcher);
pSearcher->put_ServiceID(bstr_t( "7971f918-a847-4430-9279-4a52d1efe18d"));//MicrosoftUpdateカタログ
pSearcher->put_ServerSelection(ssOthers);
BSTR bstrSearchCriteria= bstr_t( "");
_TCHAR tszCriteria [1024]= _T( "");
bstrSearchCriteria= bstr_t( "Type='ソフトウェア'");
ISearchResult* pSearchResult;
if((hr= pSearcher->Search(bstrSearchCriteria、&pSearchResult))!= S_OK)
{{
_tprintf(_T( "検索の実行に失敗しました:0x%X\n")、hr);
-1を返します.
}
IUpdateCollection* pUpdateCollection;
pSearchResult->get_Updates(&pUpdateCollection);
long lFoundUpdateCount= 0;
pUpdateCollection->get_Count(&lFoundUpdateCount);
_tprintf(_T( "Found%ldupdates.\n")、lFoundUpdateCount);
for(long l= 0; l{{
IUpdate* lpUpdate= NULL;
hr= pUpdateCollection->get_Item(l、&lpUpdate);
if(hr== S_OK)
{{
//KB記事ID
CcomQIPtrlpKBArticles;
hr= lpUpdate->get_KBArticleIDs(&lpKBArticles);
if(SUCCEEDED(hr)&&lpKBArticles!= NULL)
{{
long lKBArticlesCount= 0;
lpKBArticles->get_Count(&lKBArticlesCount);
for(long kb= 0; kb{{
BSTR bstrKB;
lpKBArticles->get_Item(kb、&bstrKB);
_tprintf(_T( "\nKB%s\n")、(const _TCHAR*)bstr_t(bstrKB));
}
}
//インストール済み/欠落
VARIANT_BOOL bInstalled;
lpUpdate->get_IsInstalled(&bInstalled);
if(bInstalled== VARIANT_FALSE)
{{
_tprintf(_T("欠落\n"));
}
そうしないと
{{
_tprintf(_T("インストール済み\n"));
}
//URLをダウンロード
CcomQIPtrBundledUpdate;
if(lpUpdate->get_BundledUpdates(&BundledUpdate)== S_OK)
{{
ロングカウント=-1;
BundledUpdate->get_Count(&count);
if(count== 0)
{{
_tprintf(_T("空のダウンロードURL\n"));
}
そうしないと
{{
_tprintf(_T( "DownloadURL(s):\n"));
for(long update= 0; 更新<カウント; update ++)
{{
CcomQIPtrretVal;
CcomQIPtrretItem;
CcomQIPtrretUpdate;
BundledUpdate->get_Item(update、&retUpdate);
retUpdate->get_DownloadContents(&retVal);
hr= retVal->get_Item(0、&retItem);
if(hr!= S_OK)
{{
継続する;
}
BSTR bstrDownloadURL;
retItem->get_DownloadUrl(&bstrDownloadURL);
_tprintf(_T( "%s\n")、(const _TCHAR*)bstr_t(bstrDownloadURL));
}
}
}
}
}
0を返します.
}

ほとんどすべてのパッチのダウンロードURLを取得していますが、2KBの記事で空のダウンロードURLを取得しています.以下は出力例です.

KB890830
インストール済み
DownloadURL:リンク:Windowskb
KB5010472
ない
DownloadURL:リンク:windows 10
KB890830
インストール済み
DownloadURL:リンク:Windowskb
KB5011487
インストール済み
空のダウンロードURL
KB4023057
インストール済み
空のダウンロードURL

返信リスト(回答:3)

1 #
DaveM12

私はデイブです、私はこれであなたを助けます.
申し訳ありませんが、コミュニティは単なる消費者フォーラムです.質問の範囲(c++プログラミング)のため、この質問をMicrosoft Q&Aの姉妹フォーラム(開発者フォーラム)のc++セクション(以下にリンク)に投稿してください.
そこから、c++開発者や専門家のホストにアクセスでき、この質問に対する知識が豊富で迅速な回答が得られます.
https://docs.Microsoft.com/ja-jp/answers/topics...

応答1# ->にスキップ
3 #
knkumar

返信してくれたDaveに感謝します.

どこに投稿すればいいのかわからなかったので、ここに投稿しました.もちろん、あなたが言及した他のグループに投稿します.

2 #
knkumar

誰かがこの問題でここにたどり着いた場合は、デイブが言及したフォーラムにクエリを投稿した以下のリンクを参照してください.

https://docs.Microsoft.com/ja-jp/answers/questions/780368/wuapi-empty-download-url-for-cumulative-updates.html