Well, here is what worked for me:
------------------ WXS -------------------
<Fragment>
<InstallExecuteSequence>
<Custom Action="CA_InstallIIS"
Before="InstallCertificates"><![CDATA[IISMAJORVERSION = ""]]></Custom>
</InstallExecuteSequence>
<Binary Id="BIN_InstallIIS.vbs" SourceFile="InstallIIS\InstallIIS.vbs"/>
<CustomAction Id="CA_InstallIIS" BinaryKey="BIN_InstallIIS.vbs"
VBScriptCall="Install" Return="check" Execute="immediate" />
</Fragment>
-------------------- VBS (InstallIIS.vbs) ----------------
option explicit
const msiDoActionStatusNoAction = 0
const msiDoActionStatusSuccess = 1
const msiDoActionStatusFailure = 3
function Install()
dim objWshShell, objFSO, strFile, strCommand, intRC
set objWshShell = CreateObject("WScript.Shell")
set objFSO = CreateObject("Scripting.FileSystemObject")
if Not IsIISRequired then
WriteLogMessage "Installing IIS not required."
Session.Property("SKIPCONFIGUREIIS") = "1"
Install = msiDoActionStatusNoAction
exit function
end if
' install iis
WriteLogMessage "Installing IIS"
SetupProgress "Installing IIS", "Installing IIS", 3
TickProgress "Initializing"
strFile = objFSO.GetSpecialFolder(2) & objFSO.GetTempName
WriteInstallIni strFile
TickProgress "Installing"
strCommand = "sysocmgr /i:..\inf\sysoc.inf /q /r /u:" & strFile
intRC = objWshShell.Run(strCommand, 0, TRUE)
objFSO.DeleteFile(strFile)
if intRC <> 0 then
WriteLogMessage "Installing IIS failed. Return code: " & intRC
Install = msiDoActionStatusFailure
exit function
end if
' Installing ASP.NET
TickProgress "Registering ASP.NET"
strCommand =
"%WINDIR%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe /i"
intRC = objWshShell.Run(strCommand, 0 ,TRUE)
' Property("VAR_CUSTOM_ACTION_RESULT") = CStr(intRC)
if intRC <> 0 then
WriteLogMessage "Registering ASP.NET failed. Return code: " & intRC
Install = msiDoActionStatusFailure
else
Install = msiDoActionStatusSuccess
end if
end function
sub WriteInstallIni(fileName)
dim objFSO, objFile
set objFSO = CreateObject("Scripting.FileSystemObject")
const constForWriting = 2
set objFile = objFSO.OpenTextFile(fileName, constForWriting, True)
objFile.WriteLine("[Components]")
objFile.WriteLine("iis_common = ON")
objFile.WriteLine("iis_smtp = ON")
objFile.WriteLine("iis_www = ON")
objFile.WriteLine("iis_inetmgr = ON")
objFile.WriteLine("aspnet=ON")
objFile.WriteLine("fp_extensions=ON")
objFile.Close
end sub
sub WriteLogMessage(text)
dim msgrec
Const msiMessageTypeInfo = &H04000000
' create the message record
Set msgrec = Installer.CreateRecord(1)
' field 0 is the template
msgrec.StringData(0) = "Log: [1]"
' field 1, to be placed in [1] placeholder
msgrec.StringData(1) = text
' send message to running installer
Session.Message msiMessageTypeInfo, msgrec
end sub
function IsIISRequired
' product dependent
IsIISRequired = true
end function
const msiMessageTypeProgress = &H0A000000
const msiMessageTypeActionStart = &H08000000
const msiMessageTypeActionData = &H09000000
sub SetupProgress(ActionName, ActionDescription, numTicksExpected)
'set the UI Status ACTIONSTART
dim statusRecordObj, progressRecordObj
set statusRecordObj = Installer.CreateRecord(3)
statusRecordObj.StringData(1) = ActionName
statusRecordObj.StringData(2) = ActionDescription
'below line defines a template for display on each message tick
statusRecordObj.StringData(3) = "[1]"
Session.Message msiMessageTypeActionStart, statusRecordObj
'resets the progress bar.
set progressRecordObj = Installer.CreateRecord(4)
progressRecordObj.IntegerData(1) = 0 '0 = reset bar
progressRecordObj.IntegerData(2) = numTicksExpected+1
progressRecordObj.IntegerData(3) = 0 '0 = left-to-right, 1= R-to-L
progressRecordObj.IntegerData(4) = 0 '0 = calc time remaining
Session.Message msiMessageTypeProgress, progressRecordObj
'tell the progress bar to increment for each ActionData message
progressRecordObj.IntegerData(1) = 1 'Action Info
progressRecordObj.IntegerData(2) = 1 'numTicks each ActionData
progressRecordObj.IntegerData(3) = 1 'increment bar for each ActionData
Session.Message msiMessageTypeProgress, progressRecordObj
end sub
sub TickProgress(message)
'The ActionData record follows the template defined in the
msiMessageTypeActionStart
'item #3. Refer to the MSI documentation related to templates. If
you add more fields
'to the template, make sure to add the additional fields here as well.
dim progressObject
set progressObject = Installer.CreateRecord(1)
progressObject.StringData(1) = message
Session.Message msiMessageTypeActionData, progressObject
end sub
------------------------ END ---------------------------------
Am 17.06.2011 11:49, schrieb Roy Clemmons:
> The script fails to run even when it does nothing:
>
> Sub myFunction()
> End Sub
>
> However, when I embed the vbscript into a custom action, it works:
>
> <CustomAction Id="testVBScript" Script="vbscript" Execute="immediate">
> <![CDATA[
> msgbox "Hello World"
> ]]>
> </CustomAction>
>
> It's only when I try to call it externally that it fails - even when my
> antivirus is turned off.
>
> I tried to keep the example as simple as possible, but, I'd really like to
> see any code that successfully calls an external script.
>
> -----Original Message-----
> From: Michael Stoll [mailto:[email protected]]
> Sent: Friday, June 17, 2011 4:27 AM
> To: General discussion for Windows Installer XML toolset.
> Subject: Re: [WiX-users] External Custom Action Not Working
>
> AFAIK the msi engine does use a special host. So a vbs which runs with
> wscript may be invalid with the msi scripting host.
>
> I once created a vbs custom action. If I remeber correctly the msi host
> does not support msgbox function.
>
> Michael
>
> Am 17.06.2011 00:06, schrieb Roy Clemmons:
>> I hope this didn't post twice. I didn't see it in the forum, but, forgive
> me
>> if this is a duplicate.
>>
>> All I'm trying to do is execute an external vbscript using a custom
> action.
>> It doesn't seem to work. A search on the forum reveals I'm not the only
> one
>> experiencing this problem. Someone providing a solution would provide a
>> great example for those of us with the problem and for future reference.
>>
>> The two files are included below. Can anyone get this to work?
>>
>> Product.wxs
>> <?xml version="1.0" encoding="UTF-8"?>
>> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
>> <Product
>> Id="B55596A8-93E3-47EB-84C4-D7FE07D0CAF4"
>> Name="Test"
>> Language="1033"
>> Version="2.0.0.0"
>> Manufacturer="Test Company"
>> UpgradeCode="B414C827-8D81-4B4A-B3B6-338C06DE3A11">
>>
>> <Package InstallerVersion="301" Compressed="yes" />
>>
>> <UIRef Id="WixUI_Minimal" />
>>
>> <Binary Id="myScriptVBS" SourceFile="myScript.vbs" />
>> <CustomAction Id="myScript_CA" BinaryKey="myScriptVBS"
>> VBScriptCall="myFunction"></CustomAction>
>>
>> <InstallUISequence>
>> <Custom Action="myScript_CA" After="LaunchConditions" />
>> </InstallUISequence>
>> </Product>
>> </Wix>
>>
>> myScript.vbs
>> Sub myFunction()
>> msgbox "Hello, World!"
>> End Sub
>>
>> Thanks in advance.
>>
>>
>>
> ----------------------------------------------------------------------------
> --
>> EditLive Enterprise is the world's most technically advanced content
>> authoring tool. Experience the power of Track Changes, Inline Image
>> Editing and ensure content is compliant with Accessibility Checking.
>> http://p.sf.net/sfu/ephox-dev2dev
>> _______________________________________________
>> WiX-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/wix-users
>>
>
> ----------------------------------------------------------------------------
> --
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
> _______________________________________________
> WiX-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>
> ------------------------------------------------------------------------------
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
> _______________________________________________
> WiX-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users