Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Program na bazie WUAPI

Ostatnio zmodyfikowano 2014-03-06 06:51
Autor Wiadomość
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
P-105617
Adik80
» 2014-03-05 09:19:36
Przepisalem na pale wiec nie gwarantuje ze dziala, ale jakby co to masz od czego zaczac

C/C++
#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;
}
P-105664
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.
P-105721
« 1 »
  Strona 1 z 1