все что связано с моей работой
Главная » Учебник WiX » На более поздней стадии

На более поздней стадии

Большинство настраиваемых действий, которые устанавливают свойства, функции или состояния компонентов, каталоги или задания планировщика операционной системы, во многих случаях используют безопасное выполнение. Другие настраиваемые действия, которые должны изменить систему или вызвать другую системную службу, должны быть приостановлены пока сценарий установки выполняется. Windows Installer умеет задерживать эти  действия для более позднего выполнения.

Отложенное действие определяется следующим образом:

Атрибут Execute будет указывать отложенный статус нашего действия. Используя атрибут DllEntry мы должны указать функцию DLL, которую мы должны вызвать, (не забывайте об оформление имен в стиле С++ как _MyAction@4, если Вы используете среду для компиляции). И, наконец, HideTarget позволит нам отключить запись в журнале параметров которые передается в/из этого действия, из соображений безопасности.

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

Свойство Описание
CustomActionData значение времени которое действие выполняется. Это свойство доступно только отложенным действиям
ProductCode GUID продукта
UserSID SID пользователя запустившего установку

Если мы должны передать какие-либо другие данные отложенному действию, мы можем использовать другое действие, чтобы установить это значение заранее. Самое простое решение — действие присвоения свойства:

Hello, from deferred CA

Запланируйте присвоение ДО отложенного действия:


  
  

Данные, которые мы передали, появятся в свойстве CustomActionData. Если мы должны передать больше чем одну порцию информации, мы должны разработать способ объединения их в единственное свойство, например, использовать точку с запятой для разделения списка пар Name=Value.

#include 
#include 
#include 
#include 

#pragma comment(linker, "/EXPORT:MyAction=_MyAction@4")

extern "C" UINT __stdcall MyAction (MSIHANDLE hInstall) {
  TCHAR szActionData[MAX_PATH] = {0};
  DWORD dActionDataLen = MAX_PATH;

  MsiGetProperty (hInstall, "CustomActionData", szActionData, &dActionDataLen);
  MessageBox (NULL, szActionData, _T("Deferred Custom Action"), MB_OK | MB_ICONINFORMATION);
  return ERROR_SUCCESS;
}

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.