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

Reply via email to