ShellExecute – VBScript –

Cmd commands in shellexecute

I am trying in execute netsh winsock reset catalog command in command prompt from an elevated(has admin privileage) c application.

HINSTANCE retVal = ShellExecute(NULL, "open", "cmd", "c netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL); 

It just opens the command prompt and nothing else happens. I have tried

HINSTANCE retVal = ShellExecute(NULL, "runas", "cmd", "c netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL); 

and

HINSTANCE retVal = ShellExecute(NULL, "open", "cmd", " netsh winsock reset catalog > CUninstall.log", NULL, SW_NORMAL); 

Shellexecute – vbscript –

Run a script or application in the Windows Shell.

Syntax
      .ShellExecute "application", "parameters", "dir", "verb", window

      .ShellExecute 'some program.exe', '"some parameters with spaces"', , "runas", 1
Key
   application   The file to execute (required)
   parameters    Arguments for the executable
   dir           Working directory
   verb          The operation to execute (runas/open/edit/print)
   window        View mode application window (normal=1, hide=0, 2=Min, 3=max, 4=restore, 5=current, 7=min/inactive, 10=default)

Note that double and single quotes that can be used to delimit paths with spaces.

The runas verb is undocumented but can be used to elevate permissions. When a script is run with elevated permissions several aspects of the user environment may change: The current directory, the current TEMP folder and any mapped drives will be disconnected.

runas will fail if you are running in WOW64 (a 32 bit process on 64 bit windows) for example %systemroot%syswow64cmd.exe …

The ShellExecute method is a member of the IShellDispatch2 object.

Examples

Run a batch script with elevated permissions, flag=runas:

Set objShell = CreateObject(“Shell.Application”)
objShell.ShellExecute “E:demobatchScript.cmd“, “”, “”, “runas”, 1

Run a VBScript with elevated permissions, flag=runas:

:/>  windows - Как я могу запустить certmgr.msc для учетной записи компьютера? - PowerUser

Set objShell = CreateObject(“Shell.Application”)
objShell.ShellExecute “cscript“, “E:demovbscript.vbs“, “”, “runas”, 1

“If you don’t execute your ideas, they die” ~ Roger Von Oech

Related:

Run with elevated permissions – Script to run as Admin.
.Exec – Execute command, returning an object.
.Run – Run a command.
joeware.net – CPAU (Create Process As User) like RunAs but with an option to encrypt the password.
Equivalent CMD command: ShellRunAs – Run a command under a different user account.


Shellexecute: глагол "runas" не работает для пакетных файлов с пробелами в пути

Я использую ShellExecuteW для запуска командного файла. Код выглядит примерно так:

ShellExecuteW(GetDesktopWindow(), wide_verb.c_str(), wide_filename.c_str(), wide_parameters.c_str(), NULL, SW_SHOW);

Где переменные wide_ имеют тип wstring. Этот код отлично подходит для произвольных комбинаций пути и глагола файла, за исключением глагола “runas” (для получения прав администратора) и командного файла с пробелами в заданном пути wide_filename. Появится приглашение UAC, и после подтверждения на короткое мгновение начнет мигать командная строка, говоря, что путь не может быть найден, отрезав в первом пространстве пути.

Я уже пробовал обернуть имя файла в дополнительных кавычках, но это не помогло.

Причина, вероятно, в том, что.bat файлы на самом деле не “исполняемые файлы”, а документы и, следовательно,

ShellExecuteW(GetDesktopWindow(), L"runas", L"C:\Path To\file.bat", L"Parameters For Batch", NULL, SW_SHOW);

внутренне отображается на повышенное выполнение

cmd.exe /C "C:Path Tofile.bat" "Parameters for Batch"

в то время как это должно быть что-то вроде

cmd.exe /S /C " "C:Path Tofile.bat" Parameters for Batch "

И действительно, если я выполню что-то вроде этого:

ShellExecuteW(GetDesktopWindow(), L"runas", L"cmd.exe", L"/S /C " "C:\Path To\file.bat" Parameters For Batch "", NULL, SW_SHOW);

это делает трюк!

:/>  DISKPART управление дисками, разделами и архивом в командной строке

Тем не менее, это не похоже на самый чистый подход к “жесткому коду” исполняемого файла (cmd.exe в этом случае). Для пакетных файлов это действительно не имеет значения, но для других документов типа сценария, которые принимают параметры, это может стать актуальным.

Поэтому возникает вопрос: возможно ли выполнить пакетный файл (с пробелами на своем пути), который был повышен через ShellExecute или аналогичный механизм, без явно переданного ему в cmd.exe?

Внимание: включить учетную запись администратора

использование runas таким образом требует, чтобы учетная запись администратора была включена, что не является значением по умолчанию для Windows 7 или Vista. Однако,здесь это отличный учебник о том, как включить его, тремя различными способами:

Я сам включил его, открыв Администрирование, Локальная Политика Безопасности, затем перейдя к местные ПолитикиПараметры Безопасности и меняем значение Учетные Записи: Состояние Учетной Записи Администратора политика включена, что ни один из трех способов, показанных в ссылке.

еще более простой способ:

Оставьте комментарий