WiX - пользовательское действие vbscript с функцией session.message - PullRequest
0 голосов
/ 24 февраля 2012

Я хочу показать пользователю диалог, который говорит, что «это будет удалено с этой установкой», и если нажать «ДА» или «ОК», то установка может продолжиться; в противном случае я хочу прервать его.

Поэтому я определил пользовательское действие (запустить vbscript) следующим образом:

<CustomAction Id="ShowUninstallInformationDlg" Impersonate="yes" Return="check" Execute="immediate" BinaryKey="ShowUninstallInformationDlg.vb" VBScriptCall=""/>
<Binary Id="ShowUninstallInformationDlg.vb" SourceFile="c:\myscripts\installer\ShowUninstallInformationDlg.vbs"/>
<InstallExecuteSequence>
  <Custom Action="ShowUninstallInformationDlg" After="FindRelatedProducts">NOT Installed AND NOT PATCH AND NOT MYPRODUCT_ANYVERSION=""</Custom>
</InstallExecuteSequence>

VBSCRIPT (ShowUninstallInformationDlg.vbs):

'ShowUninstallInformationDlg
Option Explicit

Dim text
Dim productName
Dim rec

productName = Session.Property("ProductName")
text = "The following installations are going to be removed with the installation of " & productName & ":"

If Session.Property("MYPRODUCT_ANYVERSION") <> "" Then
  text = text & "\n    * MyOtherProduct (any version)"
End If

Set rec = Session.Installer.CreateRecord(1)
rec.StringData(0) = text

Session.Message &H0B000034, rec

Тип "& H0B000034", который я использую в качестве аргумента "Session.Message", взят из примера из MSDN, см. http://msdn.microsoft.com/en-us/library/windows/desktop/aa371672(v=vs.85).aspx.

Всегда выполняется сценарий. В журнале MSI появляется следующая ошибка:

Ошибка 1720. Проблема с этим пакетом установщика Windows. Не удалось запустить сценарий, необходимый для завершения этой установки. Обратитесь в службу поддержки или к поставщику пакета. Настраиваемое действие Ошибка сценария ShowUninstallInformationDlg -2147467259, Ошибка Msi API: сообщение, тип, строка записи 19, столбец 1,

Я много раз искал в Google примеры использования Session.Message, но безуспешных результатов ... Кто-нибудь может помочь? Спасибо!

Ответы [ 4 ]

4 голосов
/ 28 августа 2012

Я использовал следующее, и оно работало правильно

Session.Message &H04000000, rec 

Пожалуйста, посмотрите VBS, которые я написал для него

  Sub LogMessage(msg)

      Dim rec
      Set rec = Session.Installer.CreateRecord(1)
      rec.StringData(0) = "Custom Message : " & msg
      Session.Message &H04000000,rec

  End Sub
1 голос
/ 24 февраля 2012

Вы не должны показывать какой-либо пользовательский интерфейс при нажатии кнопки «Удалить» в «Установка и удаление программ».В качестве альтернативы вы можете отключить кнопку удаления и оставить кнопку изменения включенной.Это вызывает опыт обслуживания пользовательского интерфейса, который обычно имеет ремонт |Изменить |Удалить диалог.Если они выбирают «Удалить» и нажимают «Далее», вы можете показать богатый пользовательский интерфейс, задающий ваш вопрос.

1 голос
/ 27 февраля 2012

Этот скрипт решил мою проблему, используя MsgBox вместо «Session.Message»:

'ShowUninstallInformationDlg
Option Explicit

const vbOKOnly           = 0    'OK button only
const vbOKCancel         = 1    'OK and Cancel buttons
const vbAbortRetryIgnore = 2    'Abort, Retry, and Ignore buttons
const vbYesNoCancel      = 3    'Yes, No, and Cancel buttons
const vbYesNo            = 4    'Yes and No buttons
const vbRetryCancel      = 5    'Retry and Cancel buttons
const vbCritical         = 16   'Critical Message icon
const vbQuestion         = 32   'Warning Query icon
const vbExclamation      = 48   'Warning Message icon
const vbInformation      = 64   'Information Message icon
const vbDefaultButton1   = 0    'First button is default
const vbDefaultButton2   = 256  'Second button is default
const vbDefaultButton3   = 512  'Third button is default
const vbDefaultButton4   = 768  'Fourth button is default
const vbApplicationModal = 0    'Application modal (the current application will not work until the user responds to the message box)
const vbSystemModal      = 4096 'System modal (all applications wont work until the user responds to the message box)

const vbOK     = 1 'OK was clicked
const vbCancel = 2 'Cancel was clicked
const vbAbort  = 3 'Abort was clicked
const vbRetry  = 4 'Retry was clicked
const vbIgnore = 5 'Ignore was clicked
const vbYes    = 6 'Yes was clicked
const vbNo     = 7 'No was clicked

const msiDoActionStatusNoAction      = 0 '&H0
const msiDoActionStatusSuccess       = 1 '&H1
const msiDoActionStatusUserExit      = 2 '&H2
const msiDoActionStatusFailure       = 3 '&H3
const msiDoActionStatusSuspend       = 4 '&H4
const msiDoActionStatusFinished      = 5 '&H5
const msiDoActionStatusWrongState    = 6 '&H6
const msiDoActionStatusBadActionData = 7 '&H7

public function ShowMessage()
  Dim productName
  Dim text
  Dim buttons
  Dim result

  productName = Session.Property("ProductName")
  text = "The following installations are going to be removed from this computer by continuing the installation of " & productName & ":"

  If Session.Property("MYPRODUCT_ANYVERSION") <> "" Then
    text = text & chr(13) & chr(13) & "    * MyOtherProduct (any version)"
  End If 

  buttons = vbExclamation + vbOKCancel
  result = MsgBox(text, buttons, "Dependant Product Installations")

  If result = vbOK Then
    ShowMessage = msiDoActionStatusSuccess
  Else
    ShowMessage = msiDoActionStatusUserExit
  End If
end function
0 голосов
/ 24 февраля 2012

Пожалуйста, смотрите этот пост для аналогичного примера и решения.

...