MyTetra Share
Делитесь знаниями!
перезапуск скрипта с сохранением исходных аргументов
16.03.2019
23:43
Текстовые метки: Shell
Раздел: !Закладки - VBA - Разобрать

Получение повышенных привилегий Администратора (перезапуск скрипта с сохранением исходных аргументов)

Код (vb.net):

Sub Elevate(msg)
    Const DQ = """"
    if msgbox(msg & vblf & "Запустить с Административными привилегиями ?", vbQuestion + vbYesNo,"Подтверждение") = vbNo then WScript.Quit 5
    Dim oShellApp: Set oShellApp = CreateObject("Shell.Application")
    ' Конкатенация аргументов
    Dim args, i: For i = 1 to WScript.Arguments.Count
        args = args & DQ & WScript.Arguments(i - 1) & DQ & " "
    Next
    oShellApp.ShellExecute WScript.FullName, DQ & WScript.ScriptFullName & DQ & " " & args, "", "runas", 1
    set oShellApp = Nothing
End Sub


Проверка, запущен ли скрипт от имени Администратора

Код (vb.net):


Function isAdminRights()
    Const KQV = 1, KSV = 2, HKLM = &H80000002
    Dim oReg, strKey, intErrNum, flagAccess
    Set oReg = GetObject("winmgmts:root\default:StdRegProv")
    strKey = "System\CurrentControlSet\Control\Session Manager"
    intErrNum = oReg.CheckAccess(HKLM, strKey, KQV + KSV, flagAccess)
    isAdminRights = flagAccess
    Set oReg = Nothing
End Function
 


Перезапуск скрипта в консольном режиме, если запущен через WScript

Код (vb.net):

const vbT = 1 'vbTextCompare
const QT = """"

Set oFSO   = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")

' Запущен ли из консоли
vbHost = oFSO.GetBaseName(Wscript.FullName)
if strcomp(vbHost, "cscript", vbT) <> 0 then
    oShell.Run QT & oShell.ExpandEnvironmentStrings("%SystemRoot%") & "\system32\cscript.exe" & QT & " //nologo " & QT & WScript.ScriptFullName & QT, 1, false
    WScript.Quit
end if

WScript.Echo vbHost
WScript.StdIn.ReadLine()


Процентный прогрессбар в консоли

Код (vb.net):

WScript.StdOut.Write "ProgressBar = "
n = 0
Do
    WScript.StdOut.Write String(3 - len(cstr(n)), " ") & n & " %"
    n = n + 1
    WScript.Sleep 20
    WScript.StdOut.Write String(5, chr(8))
Loop While n <= 100


Получить путь к запущенному скрипту

Код (vb.net):


Set oFSO = CreateObject("Scripting.FileSystemObject")
cur = oFSO.GetParentFolderName(WScript.ScriptFullName)

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования