WiX-带session.message函数的vbscript自定义操作
我想向用户显示一个对话框,上面写着“此安装将被删除”,如果按下“是”或“确定”,则安装可以继续;否则,我想中止它 因此,我定义了如下自定义操作(运行vbscript):WiX-带session.message函数的vbscript自定义操作,vbscript,wix,custom-action,Vbscript,Wix,Custom Action,我想向用户显示一个对话框,上面写着“此安装将被删除”,如果按下“是”或“确定”,则安装可以继续;否则,我想中止它 因此,我定义了如下自定义操作(运行vbscript): <CustomAction Id="ShowUninstallInformationDlg" Impersonate="yes" Return="check" Execute="immediate" BinaryKey="ShowUninstallInformationDlg.vb" VBScriptCall=""/>
<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>
未安装且未修补且不是MYPRODUCT\u ANYVERSION=“”
VBSCRIPT(ShowUninstallInformationDlg.vbs):
显示卸载信息DLG
选项显式
暗文本
Dim产品名称
暗记录
productName=Session.Property(“productName”)
text=“以下安装将随“&productName&”的安装一起删除:”
如果Session.Property(“MYPRODUCT\u ANYVERSION”)“”则
text=text&“\n*MyOtherProduct(任何版本)”
如果结束
Set rec=Session.Installer.CreateRecord(1)
记录StringData(0)=文本
会话消息&h0b00034,记录
我使用的“Session.Message”参数类型“&h0b00034”来自MSDN中的一个示例,请参阅
总是在执行脚本时,我的MSI日志中出现以下错误:
错误1720。此Windows Installer软件包有问题。无法运行完成此安装所需的脚本。请与您的支持人员或软件包供应商联系。自定义操作显示卸载信息DLG脚本错误-2147467259,Msi API错误:消息,种类,记录行19,第1列
我用Session.Message在google上搜索了大量的例子,但是没有成功的结果。。。有人能帮忙吗?谢谢 有关类似示例和解决方案,请参见post。有关类似示例和解决方案,请参见post。在“添加/删除程序”中按下“删除”按钮时,不应显示任何UI。或者,您可以禁用“删除”按钮并保持“更改”按钮处于启用状态。调用维护UI体验,该体验通常具有修复|更改|删除对话框。如果他们选择“删除”并按“下一步”,您可以显示一个丰富的UI询问您的问题。在“添加/删除程序”中按“删除”按钮时,您不应该显示任何UI。或者,您可以禁用“删除”按钮并保持“更改”按钮处于启用状态。调用维护UI体验,该体验通常具有修复|更改|删除对话框。如果他们选择“删除”并按“下一步”,您可以显示一个富用户界面,询问您的问题。此脚本通过使用MsgBox而不是“Session.Message”解决了我的问题:
显示卸载信息DLG
选项显式
常量vbOKOnly=0'仅限OK按钮
const vbOKCancel=1'确定和取消按钮
const vbAbortRetryIgnore=2'中止、重试和忽略按钮
const vbYesNoCancel=3'是、否和取消按钮
常量vbYesNo=4'是和否按钮
const vbRetryCancel=5'重试和取消按钮
常量vbCritical=16'关键消息图标
const vbQuestion=32'警告查询图标
常量VBEQUOTION=48'警告消息图标
const vbInformation=64'信息消息图标
const vbDefaultButton1=0'第一个按钮是默认按钮
常量vbDefaultButton2=256'第二个按钮为默认值
常量vbDefaultButton3=512'第三个按钮为默认值
const vbDefaultButton4=768'第四个按钮为默认值
const VBApplicationModel=0'应用程序模式(在用户响应消息框之前,当前应用程序不会工作)
const vbSystemModal=4096'系统模式(在用户响应消息框之前,所有应用程序都不会工作)
const vbOK=1“已单击确定”
const vbCancel=2“已单击取消”
const vbAbort=3'已单击中止
const vbRetry=4“已单击重试”
const vbIgnore=5“已单击忽略”
const vbYes=6单击“是”
const vbNo=7'单击了否
常量msidActionStatusNoAction=0'&H0
const msidActionStatusSuccess=1'&H1
const msidActionStatusUserExit=2'&H2
常量msidActionStatusFailure=3'&H3
常量msidActionStatusSuspend=4'&H4
const msidActionStatusFinished=5'&H5
const msidActionStatusErrorState=6'&H6
const msidActionStatusBadActionData=7'&H7
公共函数ShowMessage()
Dim产品名称
暗文本
暗按钮
模糊结果
productName=Session.Property(“productName”)
text=“通过继续安装“&productName&”,将从此计算机上删除以下安装:”
如果Session.Property(“MYPRODUCT\u ANYVERSION”)“”则
text=text&chr(13)&chr(13)&“*MyOtherProduct(任何版本)”
如果结束
按钮=vb感叹号+vbOKCancel
结果=MsgBox(文本、按钮、“相关产品安装”)
如果结果=vbOK,则
ShowMessage=msidActionStatusSuccess
其他的
ShowMessage=msidActionStatusUserExit
如果结束
端函数
此脚本通过使用MsgBox而不是“Session.Message”解决了我的问题:
显示卸载信息DLG
选项显式
常量vbOKOnly=0'仅限OK按钮
const vbOKCancel=1'确定和取消按钮
const vbAbortRetryIgnore=2'中止、重试和忽略按钮
const vbYesNoCancel=3'是、否和取消按钮
常量vbYesNo=4'是和否按钮
const vbRetryCancel=5'重试和取消按钮
常量vbCritical=16'关键消息图标
const vbQuestion=32'警告查询图标
常量VBEQUOTION=48'警告消息图标
const vbInformation=64'信息消息图标
const vbDefaultButton1=0'第一个按钮是默认按钮
常量vbDefaultButton2=256'第二个按钮为默认值
常量vbDefaultButton3=512'第三个按钮为默认值
const vbDefaultButton4=768'第四个按钮为默认值
const VBApplicationModel=0'应用程序模式(在用户响应消息框之前,当前应用程序不会工作)
常数vbSystemModal=4096
'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
'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
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