Функция 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
Продукт или компонент устанавливается для запуска из источника, компакт-диска или сети.
INSTALLSTATE_DEFAULT
Продукт или компонент будет установлен для использования расположения по умолчанию: local или source.

[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
Целевая платформа Windows
Header msiquery.h
Библиотека Msi.lib
DLL Msi.dll

См. также раздел

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

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