Hi Sean,
another helpful hint Chip had posted several times and the latest back in
November to include the separation of OS systems and the security pop-up.
From Chip:
Hi all,
e
Recently I had some issues with the installation/registration of an activeX
which I needed to distribute as part of an app. When I got them all sorted
out, I thought I'd share what I had worked out as the best way to run an
activeX registration, or any other program which may require admin privileges,
from a VBScript app.
In the example below I'm running a Windows utility named RegSvr32 to register
my activeX, but you can substitute anything else which (as I mentioned),
requires elevated privileges. Under XP the elevated privileges just happen
for you, because everyone sets themselves up as an "admin", and everything runs
like that (I didn't bother trying to work with 64-bit xp as it seems so rare).
Under Win7, you will not get the elevated privileges which you need (assuming
UAC is enabled) unless you make use of an undocumented verb parameter which is
part of the shell execute (the verb is "runas"). When you use this, a system
with UAC enabled will ask the user if it's ok to run your program as an admin;
if you don't use it, then it won't ask, and you won't get admin privileges.
Further, on 64-bit Windows, you need to run the 32-bit version of the
regsvr32 program because you should be registering a 32-bit activeX because
Window-Eyes runs as a 32-bit program (and you cannot "mix and match" the two
types).
Therefore, I offer the below example, and hope if anyone sees I've made an
error, that they'll offer corrections:
Chip
Sub registerControl(pcOCXFullPath)
Dim loShell
Dim lcRegUtilityFullpath
Dim param
Set loShell = CreateObject("Shell.Application")
If (application.OSVersion.MajorVersion >= 6) Then
' this is Windows Vista or later
' minimize any active window so that the UAC prompt will be automatically
spoken if there is one
loShell.MinimizeAll
DoEvents
sleep 500
DoEvents
silence
If clientInformation.ScriptProcess.Is64Bit Then
' registration for 64-bit Windows:
' To register a 32-bit ActiveX DLL in the 64-bit registry, you'll need to run
the regsvr32 located in \windows\syswow64.
lcRegUtilityFullpath = "c:\windows\syswow64\" ' here I should have actually
dug out the correct environment variable for the windows directory
Else ' clientInformation.ScriptProcess.Is64Bit
lcRegUtilityFullpath = "" ' use the regsvr32 in the windows dir on the path
End If ' clientInformation.ScriptProcess.Is64Bit
param = " /s """ & pcOCXFullPath & """"
' the parameters above are /s for a "silent" registration, and then the name
of the activeX file, surrounded in quotes
Speak "now running registration program"
DoEvents
loShell.ShellExecute lcRegUtilityFullpath & "regsvr32", param, "", "runas"
' the "RunAs" parameter allows for UAC prompting if necessary
' (if UAC is disabled, then it has no effect), under XP however, it causes an
unwanted "run as" security dialog to appear
Else ' (application.OSVersion.MajorVersion >= 6)
' Windows XP
param = " /s """ & pcOCXFullPath & """"
Speak "now running registration program"
' note: the shell execute below does not use the "runas" verb for Win XP
(which appears to cause an unnecessary user prompt)
loShell.ShellExecute lcRegUtilityFullpath & "regsvr32", param, "", ""
End If ' (application.OSVersion.MajorVersion >= 6)
End sub
------------------------------------------------------------------------------
This email is free from viruses and malware because avast! Antivirus
protection is active.
--------------------------------------------------------------------------------
This email is free from viruses and malware because avast! Antivirus
protection is active.
---
This email is free from viruses and malware because avast! Antivirus protection
is active.
http://www.avast.com