Връщане на стойност/отмяна на инсталацията с персонализирано действие на vbscript

Имам персонализирано действие в моя инсталатор, което отваря поле за съобщение с помощта на персонализирано действие на vbscript.

<CustomAction Id="EXENotFound" Script="vbscript" Return="check">
      <![CDATA[
        Dim i
        If session.Property("REMINDEX_SHORTCUT") = "" Then
          i = MsgBox(session.Property("TextProp"), 1)
        End If
      ]]>
</CustomAction>

Искам да отменя инсталацията, ако стойността на i = 2 (ако се натисне отмяна в полето за съобщения). Мисля, че мога да накарам инсталацията да се отмени, ако скриптът ми върне стойност 3, но винаги връща само 0. Опитах това:

Dim i
If session.Property("REMINDEX_SHORTCUT") = "" Then
  i = MsgBox(session.Property("TextProp"), 1)
End If
If i = 2 Then
  return 3
End If

което извежда някаква грешка относно „разминаване на типа“.

Опитах и ​​това, когато се отчаях:

<CustomAction Id="EXENotFound" Script="vbscript" Return="check">
          <![CDATA[
            Dim i
            If session.Property("REMINDEX_SHORTCUT") = "" Then
              i = MsgBox(session.Property("TextProp"), 1)
            End If
            If i = 2 Then
              EXENotFound = 3
            End If
          ]]> 
</CustomAction>

Направих задълбочено проучване онлайн, но не можах да намеря как да отменя инсталирането от персонализирано действие или дори как просто да върна 3 ръчно.

Всички предложения ще бъдат много оценени


person user2437443    schedule 26.06.2013    source източник
comment
Трябва да използвате потребителския интерфейс на Windows Installer, а не персонализирано действие. Започнете тук.   -  person Tom Blodget    schedule 27.06.2013
comment
Благодаря! Това работи много по-добре. Сега обаче, когато имам това съобщение, изскачащо при щракване върху Инсталиране, загубих действителната функционалност за инсталиране. Знаете ли събитието, което трябва да се задейства, за да стартира инсталацията, за да мога да го свържа с един от контролите в моя персонализиран подкана вместо бутона за инсталиране по подразбиране? Опитах се да намеря събитието в изходния код на VerifyReadyDlg, но не можах да го намеря.   -  person user2437443    schedule 28.06.2013


Отговори (2)


Само малко се занимавах с WiX и оттогава минаха няколко години, но мисля, че трябва да поставите кода си във функция:

<CustomAction Id="EXENotFound" Script="vbscript" Return="check">
  <![CDATA[
    Function AskUser
      AskUser = 0
      If session.Property("REMINDEX_SHORTCUT") = "" Then
        AskUser = MsgBox(session.Property("TextProp"), 1)
      End If
    End Function
  ]]>
</CustomAction>
person Ansgar Wiechers    schedule 27.06.2013

Ако сте в последователността на потребителския интерфейс, тогава правилният начин да направите това е да покажете стандартен диалог, създаден с помощта на вашия инструмент за разработка на MSI, и да свържете логиката за отмяна, ако това е един от изборите. Това се покрива предимно от други отговори. Правилният начин да се покаже съобщение в последователността за изпълнение (от персонализирано действие) е да се извика MsiProcessMessage (или инсталационен обект или DTF управлявани CA еквиваленти). Върнете IDCANCEL, ако е подходящо.

https://msdn.microsoft.com/en-us/library/aa370354(v=vs.85).aspx

http://microsoft.public.platformsdk.msi.narkive.com/oKHfPSZc/using-msiprocessmessage-in-a-c-custom-action

person PhilDW    schedule 30.12.2015