2012-02-24 26 views
0

「これはこのインストールで削除される予定です」というダイアログをユーザーに表示したい場合は、「はい」または「OK」を押すとインストールされます続けることができます。さもなければ、私はそれを中止したい。WiX - vbscript session.message関数を使用したカスタムアクション

そこで私はこのようなカスタムアクション(実行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ログに次のエラーを取得する実行されている:私は大規模なSession.Messageを使用例については、Googleを検索しました

Error 1720. There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. Custom action ShowUninstallInformationDlg script error -2147467259, Msi API Error: Message,Kind,Record Line 19, Column 1,

、ない後続の結果と...誰が助けることができます?ありがとう!

答えて

0

このスクリプトではなく、「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

あなたは何をしているのかをvbscriptする必要はありません。プロパティをControlEventの条件として使用して、MSIダイアログを表示することができます。 VBScriptでこれを行うと、脆弱であることが知られているテクノロジへの依存を追加するだけで、インストーラの信頼性が低下します。 –

+0

私はすでにそれを試みましたが、私はいつも終了することなくダイアログでUIチェーンを中断できませんでした!実例がありますか? – moik

0

同様の例と解決方法については、thisポストを参照してください。

1

[プログラムの追加と削除]で[削除]ボタンを押したときにUIを表示しないようにする必要があります。または、[削除]ボタンを無効にして、変更ボタンを有効のままにすることもできます。メンテナンスUIのエクスペリエンスが呼び出され、通常は修復|変更|ダイアログを削除します。 [削除]を選択して[次へ]を押すと、質問をする豊富なUIが表示されます。

+0

こんにちは、私は間違っています。最初のインストールの前にこのダイアログを表示して、インストール中に他のいくつかの製品が削除されることをユーザーに知らせたいとします。主に私の設定のいくつかのプロパティに応じてダイアログに表示されるテキストを柔軟に変更したいので、私はvbscriptを使いました。 – moik

+0

以下のコメントを参照してください。 –

4

私は次のように使用していると、私が書かれているVBSを参照してください正しく

Session.Message &H04000000, rec 

働いていましたそれのために

Sub LogMessage(msg) 

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

    End Sub 
関連する問題