установка пакета debian программно с помощью libapt-pkg - PullRequest
0 голосов
/ 29 апреля 2018

Мне нужно установить несколько пакетов в моей программе на С ++, поэтому я написал следующий код:

    pkgInitConfig(*_config);
    pkgInitSystem(*_config, _system);

    pkgCacheFile cache_file;
    pkgCache *cache = cache_file.GetPkgCache();
    pkgDepCache *dep_cache = cache_file.GetDepCache();
    pkgPackageManager *pm = new pkgPackageManager(dep_cache);

    for(pkgCache::PkgIterator package = cache->PkgBegin(); !package.end(); package++)
    {
        if((*package).CurrentState == pkgCache::State::NotInstalled)
        {
            if(package.Name() == "MyPkgName")
                if(dep_cache->MarkInstall(package))
                {
                    std::cout << "Marked" << std::endl;
                }
                break;
        }
    }

    APT::Progress::PackageManager *progress =   APT::Progress::PackageManagerProgressFactory();
    pkgPackageManager::OrderResult rs = pm->DoInstall(progress);

    if(rs == pkgPackageManager::Completed)
        std::cout << "Completed" << std::endl;
    else if (rs == pkgPackageManager::Failed)
        std::cout << "Failed!" << std::endl;
    else
        std::cout << "InComplete!" << std::endl;

Кажется, что этот блок кода выполняет свою работу, и в результате функции pm->DoInstall() становится pkgPackageManager::Completed, но когда я пытаюсь установить этот пакет из командной строки, apt-get не говорит, что пакет установлен ! На самом деле пакет не установлен.

Так что-нибудь не так с этим кодом? что-нибудь еще нужно сделать, чтобы установка была завершена?

...