Microsoft Script Control

User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Microsoft Script Control

Post by Mike Korablin »

Где можно почитать подробно по компонент? Описание всех интерфейсов классов.
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

Maybe here? http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28001169 Вас его хостинг интересует?
...а мы такой компанией, возьмем, да и припремся к Элис!
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Мне нужно было описание MSScriptControl.
Нечто похожее было найдено здесь:
http://www.microsoft.com/mind/0799/script/script.asp
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

У меня новый вопрос: как можно обработать (читай выполнить) скрипт описанный в .wsf файле где-нибудь скажем в C#?

Сегодня весь день рыскаю в поисках ответа - ни одной зацепки. :pain1:

Нашел только IWshRuntimeLibrary, но ничего полезного там не заметил.
Для VBScript и JScript есть MSScriptControl.ScriptControl, а для этого зверя?
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Post by Michael Popov »

Mike Korablin wrote:У меня новый вопрос: как можно обработать (читай выполнить) скрипт описанный в .wsf файле где-нибудь скажем в C#?

Никак. C# вначале надо откомпилировать, а потом выполнять. C# не скриптовый язык.
Best regards,

Michael Popov
Oleg_B
Уже с Приветом
Posts: 5406
Joined: 16 Apr 1999 09:01
Location: MA

Post by Oleg_B »

Mike Korablin wrote:У меня новый вопрос: как можно обработать (читай выполнить) скрипт описанный в .wsf файле где-нибудь скажем в C#?

Сегодня весь день рыскаю в поисках ответа - ни одной зацепки. :pain1:

Нашел только IWshRuntimeLibrary, но ничего полезного там не заметил.
Для VBScript и JScript есть MSScriptControl.ScriptControl, а для этого зверя?


Так содать энтот скрипт контрол из шарпа, считать в него скрипт из файла, да и выполнить...
Oleg_B
Уже с Приветом
Posts: 5406
Joined: 16 Apr 1999 09:01
Location: MA

Post by Oleg_B »

Но это если по старинке делать. По-новому надо бы из шарпа создать компилятор скрипта, им файл откомпилировать во временную ассембли, да её-то и запустить. Понятно, что чистый скрипт ещё извлечь из файла надо сначала, убрав разметку всякую.
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Michael Popov wrote:Никак. C# вначале надо откомпилировать, а потом выполнять. C# не скриптовый язык.


Есть специальный COM control для того, чтобы выполнять скрипты в C#, C++, VB - где угодно.
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Oleg_B wrote:...надо бы из шарпа создать компилятор скрипта, им файл откомпилировать во временную ассембли, да её-то и запустить.


А как создать этот компилятор?

Понятно, что чистый скрипт ещё извлечь из файла надо сначала, убрав разметку всякую.


А нужно ли будет убирать разметку? CScript ее воспринимает. Тем более, что разметка-то как раз и важна. Там можно, например, включать внешние фаилы с дополнительным кодом. ScriptControl из MSScriptControl позволяет хранить модули, но не дает возможности перекрестного доступа к методам внутри.

Пока решение - это делать deserialization .wsf фаила и объединять все скрипты в один, который выполнять, отслеживая при ошибках относительные номера строк в каждом фаиле.

Есть какие-нибудь еще предложения?
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Post by Michael Popov »

Mike Korablin wrote:
Michael Popov wrote:Никак. C# вначале надо откомпилировать, а потом выполнять. C# не скриптовый язык.


Есть специальный COM control для того, чтобы выполнять скрипты в C#, C++, VB - где угодно.


Ссылкой не поделитесь ? Особенно на "COM control, чтобы выполнять скрипты в C++".
Best regards,

Michael Popov
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Вот ссылка на msdn: http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28001169
Думаю там все можно найти.

А так посмотрите MSScriptControl в google. То, что вам нужно это ScriptControlClass от туда. В онлайне много на эту тему всего. Если будут вопросы обращайтесь.
User avatar
Gennadiy
Уже с Приветом
Posts: 11332
Joined: 30 Mar 2000 10:01
Location: Ice Storm Town

Post by Gennadiy »

Mike Korablin wrote:Есть специальный COM control для того, чтобы выполнять скрипты в C#, C++, VB - где угодно.

А зачем нужен специальный контрол если это всего пяток строчек на C#.
Microsof.CSharp спасет отца русской демократии. Скрипт загружается, компилируется в память и затем выполняется.

Code: Select all

         CSharpCodeProvider cp = new CSharpCodeProvider();
         ICodeCompiler comp = cp.CreateCompiler();
         CompilerParameters param = new CompilerParameters();
         param.GenerateInMemory = true;
         param.GenerateExecutable = true;
         CompilerResults result = comp.CompileAssemblyFromFile(param, "Script.cs");
         if(result.Errors.Count == 0)
         {
            Assembly asm = result.CompiledAssembly;
            MethodInfo mi = asm.EntryPoint;
            mi.Invoke(null,  new object[]{new string[]{}});
         }
         else
         {
            // Error handling
         }
[/code]
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

Можно референс к тому контролу добавить, если ему так больше нравится. :pain1:
...а мы такой компанией, возьмем, да и припремся к Элис!
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Post by Michael Popov »

Mike Korablin wrote:Вот ссылка на msdn: http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28001169
Думаю там все можно найти.

А так посмотрите MSScriptControl в google. То, что вам нужно это ScriptControlClass от туда. В онлайне много на эту тему всего. Если будут вопросы обращайтесь.


Mike, Ваша ссылка указывает на sript control, который позволяет выполнять скрипты на JScript & VBScript. Есть еще engines, которые выполняют JavaScript, Python, Perl, TCL. Это все скриптовые языки.

C# and VB, и тем более C++ скриптовыми языками не являются (хотя где-то видел ссылки на попытки написать интерпретатор C++).
Best regards,

Michael Popov
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Просто тут все запутались в термине что такое выполнить в с++: хостить в с++ или выполнить исходный код в с++.
MS ScriptControl умеет выполнять только JScript & VBScript. Хостится он в любой среде включая с# как обычный COM объект, никаких особенностей нет.
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Я думаю, что немного ввел всех в заблуждение. :oops:

Что действительно нужно, так это выполнить VBScript из C#. Проделать это с чистым vbcode - легко. Нужно сделать тоже самое с WSF скриптом, т.е. помимо самого скрипта обработать еще и property description.

Т.е. нужен компонент, который сможет обработать такой код

Code: Select all

<job id="WSTest">
   <script language="VBScript">
      Function Hello
         WScript.Echo "Hello There"
      End Function
      WScript.Echo "Hello"
   </script>
   <script language="VBScript" src="vbmodule.vbs"/>
   <script language="VBScript">
      ThisIs(WScript.ScriptName)
   </script>
</job>


Что касается того, что C#, VB, C++ не являются скриптовыми языками. Я знаю, что это так, и не утверждаю обратного, тем более, что мне НЕ НУЖНО ИНТЕРПРЕТИРОВАТЬ КОД НИ ОДНОГО ИЗ ЭТИХ ЯЗЫКОВ.
Все что нужно это parsing WSF фаила.
Last edited by Mike Korablin on 24 May 2004 14:52, edited 1 time in total.
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Так добавьте ScriptControl как обычный COM объект к проекту и полный вперед. В чем проблема?
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

В том, что ScriptControl не работает с xml разметкой. Голый скрипт он проглотит, а если ему подсунуть wsf - он будет пытаться выполнить его как VBScript или JScript, и, конечно же, выбросит exception.
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Mike Korablin wrote:В том, что ScriptControl не работает с xml разметкой. Голый скрипт он проглотит, а если ему подсунуть wsf - он будет пытаться выполнить его как VBScript или JScript, и, конечно же, выбросит exception.


!!!!?
Так ясен перец! Это ваша работа выцеписть скрипт из xml.
Например

Code: Select all

XmlDocument myXmlDocumen = new XmlDocument("c:\\myWsf.wsf")
XmlNode = scriptNode myXmlDocument.SelectSingleNode("//script[@language='VBScript' or @language='JScript']")
if (scriptNode != null) {
   string scriptText = node.InnerText;
    ..... // create control, feed up script
}

Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Этот выход я знаю, причем через XmlSerializer это сделать достаточно просто. Мне интересно было, можно ли это сделать не без парсирования xml самому. Похоже, что нет. :pain1:
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Serializer тут при чем? Он отвечает за превращение объекта в/из xml предстваление. У вас есть объект типа wsf, котроый себя читать/писать в xml умеет? Если нет, то надо самому запрос писать. А парсить xml не надо, парсер уже написан, вам только запрос что бы достать данные нужно написать. Ключевое слово XPath.
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Mike Korablin
Уже с Приветом
Posts: 177
Joined: 10 Apr 2003 01:15

Post by Mike Korablin »

Да, все-то хорошо, только помимо самого скрипта в wsf еще куча полезных вещей, которые тоже хорошо бы обрабатывать, так что проще описать объект, который будет (de)serialization делать с wsf.

Return to “Вопросы и новости IT”