2017-02-10 5 views
1

фона:Получение «Неверное число аргументов или присвоение недействительного свойств» при выполнении WScript.Shell.Run() из JavaScript

Я пытаюсь запустить C: \ Windows \ System32 \ logoff.exe на локальный компьютер из веб-приложения ASP.NET для выхода из локального пользователя с сеанса служб терминалов.

Вот то, что я до сих пор:

C#

protected void btnContinueClick(Object sender, 
         EventArgs e) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("WshShell = new ActiveXObject('WScript.Shell');\n"); 
     sb.Append(@"WshShell.Run('C:\\Windows\\System32\\Logoff.exe " + intSessionID + " /SERVER:" + strServer + "', 1, false);"); 
     ScriptManager.RegisterStartupScript(Page, GetType(), "RestartSession", sb.ToString(), true); 

Запуск выше меню F12 в IE открытым, показывает сценарий будет добавлен в мой HTML успешно:

HTML

<script type="text/javascript"> 
//<![CDATA[ 
WshShell = new ActiveXObject('WScript.Shell'); 
WshShell.Run('C:\\Windows\\System32\\Logoff.exe', 1, false);//]]> 
</script> 
</form> 
</body> 

Однако, когда Run (...) линии выполняется я получаю следующее сообщение об ошибке в IE:

Error: WshShell.Run() Wrong number of arguments or invalid property assignment 

То, что я пробовал:

  1. Снятие "1, ложь" необязательно arguments = та же ошибка.
  2. Перемещение '' так, что строка читает (не знаю, что правильно): sb.Append(@"WshShell.Run('C:\\Windows\\System32\\Logoff.exe " + intSessionID + " /SERVER:" + strServer + ", 1, false);'"); = та же ошибка.
  3. Вызов файла .bat с командой выхода из системы. (Бат действительно запускается, но я получаю новую ошибку: "logoff is not recognized as an internal or external command, operable program or batch file". Очень похож на Call logoff in Ant script.
  4. Также менялись символы эскадрона вокруг как можно большего количества комбинаций, о которых я могу думать, поэтому я не думаю, что это так.
  5. Выполнение команды непосредственно из окна CMD ли предполагаемая работа.

Пожалуйста, помогите!

Любые подходящие альтернативные способы выхода из служб терминалов сеанса пользователя из внутреннего веб-приложение Intranet также будет оценен!

+0

'Logoff' нуждается в некоторых параметрах? – Teemu

+0

Мой план состоял в том, чтобы заменить строку: 'sb.Append (@" WshShell.Run ('C: \\ Windows \\ System32 \\ Выход.exe "+ intSessionID +"/SERVER: "+ strServer +", 1, false '); ");' однако это создает ту же ошибку. intSessionID и strServer являются правильными значениями для идентификатора сеанса служб терминалов и имени хоста сервера. –

+0

Отредактировано вопрос, чтобы показать эти параметры, поскольку я думаю, что они будут необходимы при работе с веб-сервера. –

ответ

0

После многих изменений у меня есть рабочее решение. Хотя проблема, скорее всего, была просто с переменными передающими и escape-символами (настолько довольно тривиальными), я все равно отправляю ответ, поскольку это может указывать другим на обход при передаче переменных на нескольких платформах.

C#

ScriptManager.RegisterStartupScript(Page, GetType(), "Logoff", $"Logoff(\"{intSessionID}\", \"{strServer}\");", true); 

JavaScript

<script type="text/javascript"> 
    function Logoff(intID, strSvr) { 
     WshShell = new ActiveXObject("WScript.Shell"); 
     WshShell.Run("C:\\Users\\User\\Desktop\\Logoff.vbs" + " \"" + intID + "\" " + " \"" + strSvr + "\"", 1, false); 
    } 
</script> 

В.Б. Затем скрипт запускает оригинальную команду logoff.exe, наряду с парой других лесозаготовительных аудита линий.

Смежные вопросы