With a VBScript you can use the WScript object to check the state of a script and force it to load as elevated. Since the WScript object cannot be used in an HTA script, you cannot perform this same function. However, I have found a work around for this. You can use the ShellExecute method to launch an individual command in an elevated state.
When you use ShellExecute you can enter “runas” for the Operation parameter, it will force the command to execute in an elevated state. This is the equivalent to right-clicking on a file and choosing “Run as administrator.”
In the example below you can see how this can be used to execute an elevated command prompt window.
|ShellExecute “cmd.exe”, “”, “”, “runas”, 1|
Here is another example where it will launch an elevated command prompt and perform a DNS flush
|ShellExecute “cmd.exe”, “/c ipconfig /flushdns”, “”, “runas”, 1|
Of course this is not restricted to command prompts. You can use it to launch any application. The syntax for ShellExecute execute is:
ShellExecute “File”, “Arguments”, “Directory”, “Operation”, Show
Just remember to enter “runas” for the Operation parameter.
Below is an example of what a complete HTA script would look like with the previous two examples added.
|<html><head><title>Elevated Command</title> <HTA:APPLICATION APPLICATIONNAME=”Elevated Command” ID=”ElevatedCommand” SCROLL=”no” SINGLEINSTANCE=”yes”/> </head> <SCRIPT Language=“VBScript”> Set objShell = CreateObject(“Shell.Application”)Sub Window_Onload window.resizeTo 360,360End Sub Sub RunCMD objShell.ShellExecute “cmd.exe”, “”, “”, “runas”, 1End SubSub RunFlush objShell.ShellExecute “cmd.exe”, “/c ipconfig /flushdns”, “”, “runas”, 1End Sub</SCRIPT> <body bgcolor=“buttonface”><center><p><font face=“verdana” color=“red”>Elevated Command</font></p>If you do not have local administrator permissions, you will be prompted to supply them. This must be run as a local administrator. <p><input id=runbutton class=“button” type=“button” value=“Launch Elevated CMD” name=“db_button” onClick=“RunCMD”><p><input id=runbutton class=“button” type=“button” value=“Flush DNS” name=“db_button” onClick=“RunFlush”><p></center></body></html>|
For more information on the ShellExecute method refer to MSDN – http://msdn.microsoft.com/en-us/library/windows/desktop/bb774148(v=vs.85).aspx
I recently ran into a problem while trying to write a DWORD registry value using the RegWrite method in a VBScript. When I tried to write the value “2705144907” I received the error message:
Microsoft VBScript runtime error: Overflow
The script syntax I was using is shown below.
|set oShell = Wscript.CreateObject(“Wscript.Shell”)oShell.RegWrite “HKCU\SOFTWARE\Test\HexValue”, 2705144907, “REG_DWORD”|
What causes this problem? The RegWrite method uses the Long type variable. The Long variable is an integer in the range of -2,147,483,648 to 2,147,483,647. Since the value I am trying to add in my script (2,705,144,907) is outside this range the script will fail with the Overflow error.
So how can you write a value that is outside this range? All you have to do is convert the value from decimal to hexadecimal and use hexadecimal value in the script.
Step 1. Convert your variable from decimal to hexadecimal
- Open Windows Calculator
- Click on View and select Programmer
- On the left panel ensure Dec is selected
- Enter your value
- Click on Hex in the left panel
- Make note of the value.
This value is your hexadecimal variable. In this example 2705144907 becomes A13D3C4B.
Step 2. Enter the hexadecimal value into your script.
Note: When entering a hexadecimal variable in a VBScript you must add the &H prefix. If you do not add the &H prefix you will receive a Type mismatch error. Therefore our final variable should be set to &HA13D3C4B.
The final working script:
|set oShell = Wscript.CreateObject(“Wscript.Shell”)oShell.RegWrite “HKCU\SOFTWARE\Test\HexValue”, &HA13D3C4B, “REG_DWORD”|