Это старый вопрос, но я столкнулся с той же проблемой в Windows 10 с командой runas.Оказывается, есть максимальная длина параметра program , которая должна быть ниже 995 символов.
Например, эта команда по-прежнему работает:
runas /user:someuser /savecreds "cmd.exe 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
Параметр program здесь имеет 994 символа, и он должен открыть новую командную строку.Но если вы добавите еще один 1 в этот параметр, выполнение завершится с ошибкой 1734: The array bounds are invalid.
.
И если вы увеличите параметр program еще больше до 1026 символов, ошибкаизменяется на -2147024809: The parameter is incorrect.
.
Обычный лимит для параметров командной строки, кажется, намного больше (я читал кое-что о 8191 символе здесь на SO), так что это, похоже, проблема с runas.exeсам по себе.
Редактировать:
Я даже столкнулся с подобной проблемой, когда пытался использовать скрипт PowerShell с флагом -Credential
, подобным этому:
$username = "username"
$password = "password"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential $username, $securePassword
$argument = $args[0]
Start-Process -FilePath "C:\path\to\my.exe" -Credential $credentials -ArgumentList "-arg $argument"
Так что это, вероятно, проблема с базовой механикой Windows, а не с самим runas.exe.