Поделиться через


Функция MsiGetFeatureCostA (msiquery.h)

Функция MsiGetFeatureCost возвращает дисковое пространство, необходимое компоненту, и выбранные дочерние и родительские функции.

Синтаксис

UINT MsiGetFeatureCostA(
  [in]  MSIHANDLE    hInstall,
  [in]  LPCSTR       szFeature,
  [in]  MSICOSTTREE  iCostTree,
  [in]  INSTALLSTATE iState,
  [out] LPINT        piCost
);

Параметры

[in] hInstall

Дескриптор установки, предоставленного пользовательскому действию DLL или полученному через MsiOpenPackage, MsiOpenPackageExили MsiOpenProduct.

[in] szFeature

Указывает имя функции.

[in] iCostTree

Указывает значение, используемое функцией для определения требований к месту на диске. Этот параметр может быть одним из следующих значений.

Ценность Значение
MSICOSTTREE_CHILDREN
Дочерние элементы указанной функции включаются в стоимость.
MSICOSTTREE_PARENTS
Родительские функции указанной функции включаются в стоимость.
MSICOSTTREE_SELFONLY
Эта функция включена только в стоимость.

[in] iState

Указывает состояние установки. Этот параметр может быть одним из следующих значений.

Ценность Значение
INSTALLSTATE_UNKNOWN
Продукт или функция не распознаются.
INSTALLSTATE_ABSENT
Продукт или компонент удаляется.
INSTALLSTATE_LOCAL
Продукт или компонент устанавливается на локальном диске.
INSTALLSTATE_SOURCE
Продукт или компонент устанавливается для запуска из источника, cd или сети.
INSTALLSTATE_DEFAULT
Продукт или компонент будет установлен для использования расположения по умолчанию: локального или исходного.

[out] piCost

Получает требования к месту на диске в единицах 512 байт. Этот параметр не должен иметь значение NULL.

Возвращаемое значение

Функция MsiGetFeatureCost возвращает следующие значения:

Замечания

См. вызов функций базы данных из программ.

При функции MsiGetFeatureCost значение MSICOSTTREE_SELFONLY указывает общий объем дискового пространства (в единицах 512 байт), необходимых только указанной функции. Это возвращаемое значение не включает дочерние или родительские функции указанной функции. Эта общая стоимость состоит из затрат на диск, связанных с каждой компонентой, связанной с функцией.

Значение MSICOSTTREE_CHILDREN указывает общий объем дискового пространства (в единицах 512 байт), необходимых для указанной функции и ее дочерних элементов. Для каждой функции общая стоимость состоит из затрат на диск, которые относятся к каждому компоненту, связанному с функцией.

Значение MSICOSTTREE_PARENTS указывает общий объем дискового пространства (в единицах 512 байт), необходимых для указанной функции и ее родительских функций (вплоть до корня таблицы компонентов ). Для каждой функции общая стоимость состоит из затрат на диск, которые относятся к каждому компоненту, связанному с функцией.

MsiGetFeatureCost зависит от нескольких других функций. В следующем примере показано порядок вызова этих функций:

MSIHANDLE   hInstall;      //product handle, must be closed
int         iCost;         //cost returned by MsiGetFeatureCost

MsiOpenPackage("Path to package....",&hInstall);   //"Path to package...." should be replaced with the full path to the package to be opened
MsiDoAction(hInstall,"CostInitialize");         //
MsiDoAction(hInstall,"FileCost");
MsiDoAction(hInstall,"CostFinalize");
MsiDoAction(hInstall,"InstallValidate");
MsiGetFeatureCost(hInstall,"FeatureName",MSICOSTTREE_SELFONLY,INSTALLSTATE_ABSENT,&iCost);
MsiCloseHandle(hInstall);                        //close the open product handle

Процесс запроса стоимости функций, запланированных для удаления, немного отличается:

MSIHANDLE   hInstall;      //product handle, must be closed
int         iCost;         //cost returned by MsiGetFeatureCost

MsiOpenPackage("Path to package....",&hInstall);              //"Path to package...." should be replaced with the full path to the package to be opened
MsiDoAction(hInstall,"CostInitialize");                          //
MsiDoAction(hInstall,"FileCost");
MsiDoAction(hInstall,"CostFinalize");
MsiSetFeatureState(hInstall,"FeatureName",INSTALLSTATE_ABSENT);  //set the feature's state to "not installed"
MsiDoAction(hInstall,"InstallValidate");
MsiGetFeatureCost(hInstall,"FeatureName",MSICOSTTREE_SELFONLY,INSTALLSTATE_ABSENT,&iCost);
MsiCloseHandle(hInstall);                                        //close the open product handle

Если функция завершается ошибкой, можно получить расширенные сведения об ошибке с помощью MsiGetLastErrorRecord.

Заметка

Заголовок msiquery.h определяет MsiGetFeatureCost в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или установщик Windows 4.5 в Windows Server 2008 или Windows Vista. Установщик Windows в Windows Server 2003 или Windows XP
целевая платформа Виндоус
заголовка msiquery.h
библиотеки Msi.lib
DLL Msi.dll

См. также

Функции выбора установщика

передачи null в качестве аргумента функций установщика Windows