[C++] Program na bazie WUAPI
Ostatnio zmodyfikowano 2014-03-06 06:51
maniek1310 Temat założony przez niniejszego użytkownika |
[C++] Program na bazie WUAPI » 2014-03-04 15:52:24 Witam, mam do was prośbę o pomoc w nakierowaniu mnie jak przerobić program (link poniżej) na C++. Próbuję stworzyć program, który będzie pobierał niezainstalowane aktualizacje, ale bym musiał za każdą razom uruchamiać z poziomu programu skrypt vbs. Próbowałem to przerobić, ale jak na razie nie udało mi się nic konkretnego stworzyć.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa387102%28v=vs.85%29.aspx |
|
Adik80 |
» 2014-03-05 09:19:36 Przepisalem na pale wiec nie gwarantuje ze dziala, ale jakby co to masz od czego zaczac #include "stdafx.h" #include <windows.h> #include <comutil.h> #include <iostream> #import "Wuapi.dll"
int _tmain( int argc, _TCHAR * argv[] ) { try { CoInitializeEx( 0, COINIT_APARTMENTTHREADED ); WUApiLib::IUpdateSessionPtr pSession; pSession.CreateInstance( _T( "Microsoft.Update.Session" ) ); WUApiLib::IUpdateSearcherPtr pSearcher = pSession->CreateUpdateSearcher(); std::cout << "Searching for updates\n"; WUApiLib::ISearchResultPtr pResult = pSearcher->Search( "IsInstalled=0 and Type='Software' and IsHidden=0" ); WUApiLib::IUpdateCollectionPtr pToDownload; pToDownload.CreateInstance( _T( "Microsoft.Update.UpdateColl" ) ); long upd = pResult->Updates->Count; std::cout << "Found:\n"; for( int i = 0; i < upd; ++i ) { WUApiLib::IUpdatePtr pUpdate = pResult->Updates->Item[ i ]; std::cout <<( char * ) pUpdate->Title; if( pUpdate->InstallationBehavior->CanRequestUserInput == VARIANT_TRUE ) { std::cout << " - Skiping \n"; continue; } if( pUpdate->EulaAccepted == VARIANT_FALSE ) { if( MessageBoxW( 0, L"UPDATE TO ACCEPT",( LPCWSTR ) pUpdate->EulaText, MB_YESNO | MB_ICONQUESTION ) != MB_OK ) { std::cout << " - Update not accpted\n"; continue; } } pToDownload->Add( pUpdate ); std::cout << " - downloading\n"; } if( pToDownload->Count == 0 ) { std::cout << "nothing to download. Exiting.\n"; return 0; } WUApiLib::IUpdateDownloaderPtr pDownloader = pSession->CreateUpdateDownloader(); pDownloader->Updates = pToDownload; pDownloader->Download(); WUApiLib::IUpdateCollectionPtr pToInstall; pToInstall.CreateInstance( _T( "Microsoft.Update.UpdateColl" ) ); bool resReq( false ); for( int i = 0; i < upd; ++i ) { WUApiLib::IUpdatePtr pUpdate = pResult->Updates->Item[ i ]; if( pUpdate->IsDownloaded == VARIANT_TRUE ) { pToInstall->Add( pUpdate ); if( pUpdate->InstallationBehavior->RebootBehavior != WUApiLib::irbNeverReboots ) resReq = true; } } if( pToInstall->Count == 0 ) { std::cout << "Nothing to install. Exiting"; return 0; } if( resReq ) std::cout << "Rebot required\n"; WUApiLib::IUpdateInstallerPtr pInstaler = pSession->CreateUpdateInstaller(); pInstaler->Updates = pToInstall; pInstaler->Install(); std::cout << "Instalation compleated\n"; } catch( _com_error & e ) { std::cout <<( char * ) e.Description(); } catch(...) { std::cout << "Unknown exception"; } return 0; } |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2014-03-06 06:51:44 Ok dzięki, jak wrócę do domu to zobaczę. Tylko jeszcze mam pytanie, czy żeby to zadziałało to potrzeba Visual C++ 2013 czy wystarczy np. Qt z kompilatorem Visual. |
|
« 1 » |