Not in C# but simple old VBScript (but does work). When I was first
implementing this it took a bit of bashing/googling to get it to work.
What's particular odd is the record seems to need to be 3 fields, but the
only the first and third fields are used. Also the error template just needs
to be very simple "[3]" (presumably the 3 refers to the 3rd field of the
record).
Note that I recently found an odd problem with the
EnsureSimpleErrorMsgTemplate call and replaced it with a simple <Error
Id="32000">[3]</Error>.
Rob
'
' Display a message box
' - buttons: vbOKOnly, vbOKCancel, vbAbortRetryIgnore, vbYesNoCancel,
vbYesNo, vbRetryCancel
' - icon: vbCritical, vbQuestion, vbExclamation, vbInformation
' - Using icon vbCritical uses msiMessageTypeError,
' vbExclamation uses msiMessageTypeWarning,
' vbQuestion or vbInformation is msiMessageTypeUser
' - Common errors when calling this routine is to incorrectly specify
' the type of button (do not use vbOK.. it's vbOKOnly). Also incorrectly
' specifying the icon causes problems (do not use vbOkOnly + vbError, as
' vbError is not a valid icon).
'
Function MsiMsgBox(Message, Buttons)
dim MessageType
dim r
'
' Make sure error #32000 exists (template of "[3]")
'
call EnsureSimpleErrorMsgTemplate()
'
' The record to pass
'
set r = Session.Installer.CreateRecord(3)
r.IntegerData(1) = 32000
r.StringData(3) = Message
'
' Figure out the type of message
'
if (Buttons and vbCritical) = vbCritical then
MessageType = msiMessageTypeError + (Buttons and 15)
elseif (Buttons and vbExclamation) = vbExclamation then
MessageType = msiMessageTypeWarning + (Buttons and 15)
else
MessageType = msiMessageTypeUser + (Buttons and 15)
end if
'
' Display the message, return whatever button the user clicked
'
MsiMsgBox = Session.Message(MessageType, r)
End Function
'
' EnsureSimpleErrorMsgTemplate
' - Add error #32000 to the Errors table with a simple
' template of "[3]". This allows a call to Session.Message
' to display any text.
'
Sub EnsureSimpleErrorMsgTemplate()
'
' For now just assume the Error record exists
' - Under Win2008 msi 4.5.6001.22162 the OpenView call would always
' throw an error, #0x80004005, with a description of "Database".
' TODO: At some point this needs to be more fully investigated.
'
exit sub
Dim query
Dim view
dim record
Query = "SELECT `Error` FROM `Error` WHERE `Error` = 32000"
set view = Session.Database.OpenView(Query)
View.Execute
set Record = View.Fetch
if Record is Nothing then
query = "INSERT INTO `Error` (`Error`, `Message`) VALUES (32000,
'[3]') TEMPORARY "
set view = Session.Database.OpenView(query)
view.Execute
end if
End Sub
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users