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", 0 This 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 5You 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> 5