Installer un programme(msi) en tant qu'administrateur


Description

Exemple d'utilisation:
SoftwareUpdater permet à un utilisateur standard de sélectionner à partir d'une interface web un des packages msi
se trouvant dans le dossier 'msi' et de l'installer.
Pour ce, vous trouverez un utilitaire dans le dossier 'ExecAs'(ExecAs.bin et ExecAs.exe) permettant de créer un exe qui lui même lancera un
programme ou une commande en tant qu'administrateur ou autre. Vous trouverez tous les codes de celui-ci sur:
http://msdn.microsoft.com/en-us/library/aa379608(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms682431(VS.85).aspx

Marche à suivre:
lancer ExecAs.exe
remplissez les champs (champ command line = wscript.exe SoftwareUpdater.vbs)
cliquez sur MakeExeFile et enregistrez le dans le même dossier que SoftwareUpdater.vbs sous le nom 'start_SoftwareUpdater.exe' par exemple.

Testez:
Avec un compte utilisateur standard, lancez 'start_SoftwareUpdater.exe', l'installation doit se dérouler sans pb.

NB: les fichiers PackageMsi1.msi PackageMsi2.msi et PackageEtc.msi sont des fichiers vides, il faut les remplacer par des packages msi valides.

Source / Exemple :


'******************************************************************************
'*** SoftwareUpdater.vbs permet de sélectionner à partir d'une interface web un
'*** des packages msi se trouvant dans le dossier 'msi' et de l'installer.
'*** Ce script doit être lancé en tant qu'administrateur.
'*** L'utilitaire ExecAs vous permettra de le rendre accessible par un utilisateur
'*** standard (création d'un exe avec pour ligne de commande 'wscript.exe SoftwareUpdater.vbs').
'***
'******************************************************************************

on error resume next
Const Overwrite = True
Const ForReading = 1
Const ForWriting = 2
Const ALL_USERS = True
dim ListeMsi(50)
Dim shell, IE
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set shell = WScript.CreateObject("WScript.Shell")
Set objService = GetObject("winmgmts:")
Set objSoftware = objService.Get("Win32_Product")
RepWork = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")-1)
RepWorkWeb=""
for i=1 to len(RepWork)
        char=mid(RepWork, i, 1)
        if char="\" then RepWorkWeb=RepWorkWeb & "/" else RepWorkWeb=RepWorkWeb & char
next
PathMsi=RepWork & "\msi\"

 'lecture de tous les packages msi disponibles
 NbreMsi=0
 If objFSO.FolderExists(PathMsi) Then
        Set objFolder = objFSO.GetFolder(PathMsi)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
                if GetExtension(objFile.Name)=".msi" then
                        NbreMsi=NbreMsi+1
                        ListeMsi(NbreMsi)=objFile.Name
                end if
        Next
 end if
 
 'affichage page web
 OpenIE()
 shell.AppActivate "Gestionnaire d'ordinateurs"
 AffichePageWeb "SoftwareUpdater.htm", 0

 do
        do
                WScript.Sleep 30
                err.clear()
                action=IE.Document.Script.CheckVal()
                if err.number<>0 then
                        WScript.Sleep 30
                        err.clear()
                        IE.document.Open
                        IE.document.close
                        if err.number<>0 then exitprog() else AffichePageWeb "SoftwareUpdater.htm"
                end if
        Loop While (action = "off")

        if action="installer" then
                'Recherche du package à installer
                for i=1 to NbreMsi
                        IsChecked=IE.Document.SelectionForm.GroupeRadioMsi(i-1).checked
                        if IsChecked then
                                IsChecked=i
                                exit for
                        end if
                next
                if IsChecked then
                        'lance l'install du msi
                        AffichePageWeb "SoftwareUpdater.htm", IsChecked
                        errReturn = objSoftware.Install(PathMsi & ListeMsi(i), , ALL_USERS)
                        if errReturn<>0 then
                                MsgBox "   L'intallation du package '" & ListeMsi(i) & "' a echoué.", vbCritical + vbOkOnly + vbSystemModal + 0,"Erreur d'exécution"
                        else
                                MsgBox "L'intallation du package '" & ListeMsi(i) & "' s'est terminé correctement.", vbInformation + vbOkOnly + vbSystemModal + 0,"Fin d'exécution"
                        end if
                        AffichePageWeb "SoftwareUpdater.htm", 0
                else
                        MsgBox "Vous devez sélectionner un programme à mettre à jour.", vbCritical + vbOkOnly + vbSystemModal + 0,"Erreur d'exécution"
                end if
        end if

        err.clear()
        IE.Document.Script.SetVal("off")
        if err.number<>0 then action="quitter"
 Loop While (action<>"quitter")

 exitprog()

'------------------------------------------------------------
' Fonction d'arret du script
Function exitprog()
 IE.Quit
 Set IE = Nothing
 wscript.quit
end function

'------------------------------------------------------------
' Fonction ouverture IE
Function OpenIE()
        Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
        With IE
         .left=0
         .top=0
         .height=740
         .width=1024
         .menubar=0
         .toolbar=0
         .statusBar=0
         .navigate "About:Blank"
         .visible=1
        End With
        ' Attendre la fin du chargement de IE
        Do while IE.busy
                wscript.sleep(50)
        loop
end function

'------------------------------------------------------------
' Fonction affichage page web
Function AffichePageWeb(pageweb, index)
On error resume next

 err.clear()
 Set objPageWeb = objFSO.OpenTextFile(RepWork & "\" & pageweb, ForReading)
 if err.number<>0 then
        MsgBox "Erreur d'ouverture de fichier." & vbCrLf & "Veuillez vérifier que le fichier '" & RepWork & "\" & pageweb & "' est accessible.", vbCritical + vbOkOnly + vbSystemModal + 0,"Erreur ouverture fichiers"
        exitprog()
 end if

 IE.document.Open
 Do Until objPageWeb.AtEndOfStream
        line=trim(objPageWeb.ReadLine)
        if line<>"" then
                IE.document.Writeln(line)
                if line="<!--inserrer ici la liste des packages msi-->" then
                        if index<>0 then
                                ligne="Installation du package en cours, veuillez patienter...  (ce traitement peut être long)<br><br><img border='0' src='file:///" & RepWorkWeb & "/install.gif' width='30' height='32'>&nbsp;&nbsp;&nbsp;&nbsp;" & ListeMsi(index) & "<br>"
                                IE.document.Writeln(ligne)
                        else
                                for ii=1 to NbreMsi
                                        ligne="<input type='radio' value='option_" & ii & "' name='GroupeRadioMsi'>" & ListeMsi(ii) & "<BR>"
                                        IE.document.Writeln(ligne)
                                next
                        end if
                end if
         end if
 loop
 IE.document.Close
 objPageWeb.Close
 IE.Document.SelectionForm.textsearch.value=textsearch
end function

'------------------------------------------------------------
' Fonction retournant l'extension d'un fichier
function GetExtension(filename)
        GetExtension=""
        filename=trim(filename)
        if len(filename)=0 then exit function
        yy=InStrRev(filename, ".")
        if yy>0 then GetExtension=mid(filename, yy, len(filename)-yy+1)
end function

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.