func (d *Downloader) Download() error {
	r, err := oleutil.CallMethod(d.IUpdateDownloader, "Download")
	d.IDownloadResult = r.ToIDispatch()
	if err != nil {
		return fmt.Errorf("download error: [%s] [%v]", errors.UpdateError(r.Val), err)
	}
	return nil
}
Download will download the requested updates.
package download
import (
	"fmt"
	"github.com/google/cabbie/errors"
	"github.com/google/cabbie/session"
	"github.com/google/cabbie/updatecollection"
	"github.com/go-ole/go-ole"
	"github.com/go-ole/go-ole/oleutil"
)
type Downloader struct {
	IUpdateDownloader *ole.IDispatch
	IDownloadResult   *ole.IDispatch
}
func NewDownloader(us *session.UpdateSession, uc *updatecollection.Collection) (*Downloader, error) {
	udd, err := us.CreateInterface(session.Downloader)
	if err != nil {
		return nil, err
	}
	if _, err = oleutil.PutProperty(udd, "Updates", uc.IUpdateCollection); err != nil {
		return nil, fmt.Errorf("failed to register updates for download: \n %v", err)
	}
	return &Downloader{IUpdateDownloader: udd}, nil
}