Ano ang WSF file?
Ang WSF file ay isang script na nasa ilalim ng executable na kategorya at karaniwang ginagamit sa Microsoft Windows. Sinusuportahan ng script ang paghahalo ng maraming wika, nangangahulugan ito na sa WSF file ay maaaring magsama ng isang timpla ng JScript, VBScript at opsyonal na ilang elemento ng XML o iba pang mga scripting na wika tulad ng Python, Object REXX, Perl, Kixtart kung naka-install ng user. Ang mga WSF file ay nagpapatupad ng kanilang mga sarili sa kawalan ng WScript o CScript. Ang mga WSF file ay maaaring maging kapaki-pakinabang sa error isolation at expose constants.
WSF file format
Maaaring paghaluin ng format ng WSF file ang JScript at VBScript mula sa iyong mga nakaraang proyekto ng Windows Script Host, binibigyang-daan ka ng isang .wsf file na gamitin ang mga ito sa Windows Script Host. Ang isang WSF script ay nakapaloob sa isang library ng mga function na maaaring magamit ng iba’t ibang WSF file. Ang halimbawa sa ibaba ay nagpapakita ng isang .wsf file na may kasamang JScript file (fso.js), kasama ang isang VBScript function na tumatawag sa isa pang function.
<job id="IncludeExample">
<script language="JScript" src="FSO.JS"/>
<script language="VBScript">
' Get the free space for drive C.
s = GetFreeSpace("c:")
WScript.Echo s
<script>
</job>
Sinusuportahan ng format ng WSF ang mga sumusunod na karagdagang feature:
- Include statements
- Multiple engines
- Type libraries
- Tools
- Multiple jobs in one file
Mga benepisyo ng mga WSF file
Ang mga WSF file ay maaaring maging kapaki-pakinabang sa mga sumusunod na lugar:
Error sa paghihiwalay
Ang modular na katangian ng WSF file ay maaaring humadlang sa isang script reference na makagambala sa isa pa na ginagawang kapaki-pakinabang ang WSF para sa paghihiwalay ng mga error. Narito ang isang halimbawa ng WSF na may isang module na gumagawa ng isang error at isa na hindi:
<?xml version="1.0" ?>
<job id="Partially works">
<!-- This will not work -->
<script language="VBScript">
' <![CDATA[
WScript.echo 4/0 ' Oh, boy! You cannot divide by zero...
]]>
</script>
<!-- This will work... definitely... -->
<script language="VBScript">
<![CDATA[
WScript.echo "Hello, Scripters!" & vbNewline & _
"Fantastic! It worked!"
' ]]>
</script>
</job>
Pinaghalong suporta sa wika
Ang isang WSF ay sumusuporta sa maraming wika, maaari kang magkaroon ng isang scripting language na gumamit ng code mula sa isa pang scripting language. Narito ang isang halimbawa kung paano ito gumagana:
<?xml version="1.0" ?>
<!-- Mixing JScript and VBScript -->
<job id="SORT-VBScriptWithJScript">
<script language="JScript">
function SortVBArray(arrVBArray) {return arrVBArray.toArray().sort();}
</script>
<script language="VBScript">
' <![CDATA[
'** Fastest sort: call the Jscript sort from VBScript
myData = "a,b,c,1,2,3,X,Y,Z,p,d,q"
wscript.echo "Original List of values: " & vbTab & myData
starttime = timer()
sortedArray = SortVBArray(split(myData,","))
endtime=timer()
jscriptTime = round(endtime-starttime,2)
wscript.echo "JScript sorted in " & jscriptTime & " seconds: " & vbTab & sortedArray
' ]]>
</script>
</job>
Paglalantad ng mga pare-pareho
Sinusuportahan ng WSF ang pag-binding ng isang XML wrapper sa isang object reference o control para magamit mo ang mga constant ng object na iyon sa halip na ideklara ang mga ito. Ang sumusunod ay isang halimbawa:
<?xml version="1.0" ?>
<!-- WSF Example with Object Reference
Notes for this very formal example:
CDATA is used to help the XML parser ignore
special characters in the content of the script.
The CDATA open and close must be masked
from VBScript by making them comments.
-->
<package>
<job id="EnumerateConstantsADO">
<reference object="ADODB.Recordset" />
<script language="VBScript">
' <![CDATA[
dim title, str, i
ctecArray = Array("adOpenUnspecified","adOpenForwardOnly", _
"adOpenKeyset","adOpenDynamic","adOpenStatic")
title = "ADO Recordset Values for Constants"
str = title & vbNewLine & vbNewLine
str = str & "*CursorTypeEnum Constants*" & vbNewLine
For i = 0 to ubound(ctecArray)
str = str & Eval(ctecArray(i)) & vbTab & ctecArray(i) & vbNewLine
Next
str = str & vbNewLine
str = str & "*LockTypeEnum Constants*" & vbNewLine
ltecArray = Array("adLockUnspecified","adLockReadOnly", _
"adLockPessimistic","adLockOptimistic", _
"adLockBatchOptimistic")
For i = 0 to ubound(ltecArray)
str = str & Eval(ltecArray(i)) & vbTab & ltecArray(i) & vbNewLine
Next
MsgBox str, vbInformation, Title
' ]]>
</script>
</job>
</package>