I've tried many solutions, but they didn't work, somehow.
I can currently launch a bat file without command window from a vbs but I don't know how to launch it as admin.
VBScript (So I can launch the batch file without a command window):
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c Start.bat"
oShell.Run strArgs, 0, false
Batch (Start.bat):
Start /wait Application.exe
Net stop ServiceNameGoesHere
How do I launch the batch file as administrator while still making it invisible?
2 Answers
You can use the ShellExecute method of the Windows Shell object instead, and use the runas operation.
Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "Start.bat", , , "runas", 0This will request elevation and run Start.bat.
ShellExecute's arguments are (excerpted and summarized from the ShellExecute page on MSDN):
- sFile [in] - String of the filename to perform the operation on
- vArguments [in, optional] - String of arguments (command line arguments)
- vDirectory [in, optional] - The fully qualified path of the directory that contains the file specified by sFile. If this parameter is not specified, the current working directory is used.
- vOperation [in, optional] - The operation to be performed. If this parameter is not specified, the default operation is performed.
- vShow [in, optional] - Initial window display recommendation. 0 for hidden.
If you absolutely have to use cmd /c to run the batch file, you'll need to specify the full path to it. The invocation would look something like this:
Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "cmd", "/c F:\ull\path\to\Start.bat", , "runas", 0 5 You can add this code to the top of the batch file and it will self request admin rights:
@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' ( echo Requesting administrative privileges... goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" set params = %*:"="" echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" exit /B
:gotAdmin pushd "%CD%" CD /D "%~dp0"
:-------------------------------------- <YOUR BATCH SCRIPT HERE>From here:
5