I am new at scripting in HTA. I've created this hta to give user an interface and show the progress of an application during its installation from start to finish. We typically deploy application silently, lately our management wants to show the installation in a single interface. My script is to deploy the applicaion with this hta front end to display the progress while monitor a specified process is running "setup.exe" and show each step of the way.
The progress bar is working, however, it does not know when to stop. I tried both clearinterval and cleartimeout window.clearInterval(iTimerID2) window.clearTimeout(iTimerID2)
It is not working. Any help or suggestion is appreciated.
What I would like the script to do is to stop the progress bar when the maxprogress is reach or when the setup.exe is finished.
here is the code:
<html>
<head>
<HTA:APPLICATION ID="porgbar"
APPLICATIONNAME="MyApp Installation"
BORDER="thin"
BORDERSTYLE="normal"
CAPTION="yes"
MAXIMIZEBUTTON="no"
MINIMIZEBUTTON="no"
SHOWINTASKBAR="yes"
SINGLEINSTANCE="yes"
SYSMENU="yes"
VERSION="1.0"
/>
<style type="text/css">
<!--
#barreprog {
position:absolute;
left: 50%;
right: 25%;
width:700px;
margin-left: -350px;
height: 1em;
bottom: 15%;
padding:2px;
background-color:white;
border:1px solid black;
}
#indicator{
width:0px;
height: 1em;
background-color:C06A45;
}
//-->
<title>MyApp Installation</title>
BODY {font-family: Trebuchet MS, Helvetica, Arial; font-size: 14pt; color: black }
</style>
</head>
<body>
<h2 style="text-align:center;">MyApp installation process has started</h2>
<hr style="width:75%; color: navy;"/>
<DIV ALIGN=CENTER>
<p><font size="5">Please save your work and close all applications before clicking <b>“Install Now.”</b></font></p>
<p><font size="5"><i>This process should take approximately 40 minutes to complete. Please do not attempt to launch any applications during this time.</i></font></p>
</DIV>
<div id="DynamicText" style="text-align: center; color:red; font-weight: bold; font-size:25px">
<p> </p>
</div>
<div id="InstallButton" style="visibility: hidden;">
<p style="text-align: center;"><input type="button" id="InstallNow" value="Install Now"></p>
</div>
<script language="VBScript">
' Count Down Code
' Declare global variable outside of the Subs
Option Explicit
Dim strComputer, strProcess
Dim iRefreshRt, maxprogress, actualprogress
Dim text1, text2, text3, text4
Dim intMinutes, intSeconds
Dim iTimerID
Dim iTimerID1
Dim iTimerID2
iRefreshRt = 15000
maxprogress = 500
actualprogress = 0
strComputer = "."
strProcess = "setup.exe"
text1 = "Now processing you request..."
text2 = "Now remove previous version..."
text3 = "Now removing and installing..."
text4 = "Installation complete..."
intMinutes = 1
intSeconds = 01
Sub Window_onLoad
window.ResizeTo 900, 450
window.MoveTo ((Screen.Width / 2) - (900 / 2)),((Screen.Height / 2) - (450 / 2))
' Set the minutes and seconds
iTimerID1 = window.setInterval("Countdown", 1000, "VBScript")
DynamicText.innerHTML = intMinutes & "min:" & Right("00" & intSeconds, 2) & "s"
InstallButton.Style.Visibility = "visible"
document.body.bgColor="E9F1EA"
End Sub
Sub Countdown
DynamicText.innerHTML = intMinutes & "min:" & Right("00" & intSeconds, 2) & "s"
If intSeconds = 0 Then
' Install auotmatically after time expires
If intMinutes = 0 Then
InstallNow.Click
Else
intMinutes = intMinutes - 1
intSeconds = 59
DynamicText.innerHTML = intMinutes & "min:" & Right("00" & intSeconds, 2) & "s"
End If
Else
intSeconds = intSeconds - 1
DynamicText.innerHTML = intMinutes & "min:" & Right("00" & intSeconds, 2) & "s"
End If
End Sub
' On Click the install button
Sub InstallNow_onClick()
dim oShell, objFSo
set oShell = CreateObject("WScript.Shell")
oShell.RegWrite "HKCU\Software\MyApp\Time", "now" , "REG_SZ"
oShell.RegWrite "HKCU\Software\MyApp\Date", cstr(date) , "REG_SZ"
Set oShell = nothing
set objFSo = CreateObject("Scripting.FileSystemObject")
If objFSo.fileExists("C:\MsgFlag.txt") then
objFSo.DeleteFile("C:\MsgFlag.txt")
End If
Set objFSo = nothing
If InstallNow.Value = "Install Now" Then
Window.clearTimeout(iTimerID1)
InstallNow.disabled = True
Document.getElementById("DynamicText").innerHTML = text1
' DynamicText.innerHTML = "Now processing you request..."
InstallNow.Value = "In Progress"
Call ProcessStatus
iTimerID = window.setInterval("UpdateStatus", iRefreshRt) 'Set timer ONCE
document.body.bgColor="C9DECB"
End If
End Sub
Sub UpdateStatus
Dim ProcessStat
ProcessStat = ProcessStatus
End Sub
Function ProcessStatus
Dim objWMIService, colProcesses, objProcess, objProgram
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" & strProcess & "'")
If colProcesses.Count > 0 Then
ProcessStatus = "Running"
document.body.bgColor="B4D1B6"
Do Until colProcesses.Count = 0
' MsgBox strProcess & " is running."
Document.getElementById("DynamicText").innerHTML = text3
' DynamicText.innerHTML = "Now removing and installing..."
Call StartProg
Exit Do
Loop
Else
window.clearInterval(iTimerID2)
InstallNow.Value = "In Progress"
document.body.bgColor="C9DECB"
' Document.getElementById("DynamicText").innerHTML = text4
End IF
End Function
Function iTimer (TimeCheck)
iTimer = 60000 * TimeCheck 'Ensure numeric
End Function
sub StartProg()
iTimerID2 = setInterval("prog", 10000, "vbscript")
end sub
sub prog()
Dim objWMIService, objFSO, objShell, colFileList
dim indic
Set indic = document.getElementById("indicator")
actualprogress = actualprogress + 1
indic.style.width = actualprogress
if actualprogress > maxprogress then
window.clearInterval(iTimerID2)
Document.getElementById("DynamicText").innerHTML = text4
document.body.bgColor="6CA870"
End if
End sub
</script>
<div id="barreprog">
<div id="indicator"> </div>
</div>
</head>
<div id="Progress"> </div>
</body>
</html>
This post has been edited by Tripredacus: 06 November 2012 - 09:23 AM



Help
Back to top








