Страница: 1 |
Страница: 1 |
Вопрос: VBS: 2 вопроса
Добавлено: 04.04.11 14:10
Автор вопроса: t0r19
Здравствуйте! Прошу дать ссылку на темы если такие были или ответить на вопросы полнее, насколько не жалко. Я в большей степени админ, форсированно осваиваю WSH по книгам, т.к. понадобилось, поэтому буду благодарен за развернутые ответы.
1. Почему при попытке создать ссылку на объект .NET Framework вылетает ошибка с тем, что такого объекта нет.
Пример:
set st =wscript.createobject ("System.Windows.Window")
Сервер выдает:"не удается найти класс программируемых объектов с именем "System.Windows.Window". код:80020009.
Класс такой есть и описан на MSDN http://msdn.microsoft.com/ru-ru/library/system.windows.window.aspx Вроде как все по правилам указана иерархия.
2. Как обойти ожидание MsgBox нажатие клавиши?
Пример:
Условный скрипт должне долго работать, ну например слушать ответы на ping и писать это в файл. Считаем что такой код работает без сбоев. Мне нужно повесить окно MsgBox с вопросом "остановить?" и когда будет нажата клавиша "ОК" исполнение остановится, а так все работает.
Сейчас получается, что исполнение сразу останавливается, т.е. пока MsgBox не получит любого нажатие клавиши -исполнение стоит.
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 04.04.11 15:48
1. Попробуй System.Windows.Forms.Form
2. Енто надо запускать в другом потоке, чтобы ничего не останавливалось. Или, как вариант, подавать события извне, как то Timer'ом.
Номер ответа: 2
Автор ответа:
t0r19
Вопросов: 2
Ответов: 5
Профиль | | #2
Добавлено: 05.04.11 07:13
"1. Попробуй System.Windows.Forms.Form"
Результат тот же, т.е. ошибка про то, что объект не находится. Сразу хочу оговориться, что фреймворки всех версий на машине стоят и опробовано под разными версиями windows-а. Причем ссылки на некоторые объекты срабатывают, вот и не могу закономерности отследить. По крайней мере хочется понять ограничения: в книгах не нашел этой темы. А возможности были бы безграничными, если использовать объекты фреймворка.
"надо запускать в другом потоке" можно пояснить? Я говорил, что больше админ чем кодер, поэтому сразу схватить не могу.
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 05.04.11 09:30
в vbS нету многопоточности, поэтому лучше вместо messagebox используй другую форму с кнопкой "Остановить?"
Номер ответа: 4
Автор ответа:
Just
Вопросов: 4
Ответов: 330
Профиль | | #4
Добавлено: 07.04.11 08:51
по второму вопросу пару идей предложить могу:
1. выводить периодически сообщение об отмене
2. использовать IE, но для этого нужен сам IE да и кривовато выглядит.
создаешь объект IE, добавляешь чекбоксы HTML-кодом, вызываешь свою функцию, которая будет проверять, не нажат ли чекбокс
что-то типа
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 07.04.11 20:12
C чего вы вообще взяли что можно создать экземпляр класса System.Windows.Window?
Сборка PresentationFramework, в которой он находится помечена как
[assembly: ComVisible(false)]
Это значит что ее нельзя использовать как COM сборку. А CreateObject создает как раз COM объекты. nuff said
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 07.04.11 20:20
Причем ссылки на некоторые объекты срабатывают, вот и не могу закономерности отследить
Закономерность есть.
Если ни на сборке, ни на типе нет атрибута ComVisible, тип можно использовать через COM.
Если на типе стоит атрибут ComVisible(false), его нельзя использовать через COM вне зависимости от того какой атрибут на сборке
Если на типе стоит атрибут ComVisible(true), его можно использовать через COM вне зависимости от того какой атрибут на сборке
Если на сборке есть атрибут ComVisible(false), на типе нет атрибута, тип нельзя использовать через COM
Если на сборке есть атрибут ComVisisble(true), то это ни на что не влияет.
Номер ответа: 7
Автор ответа:
t0r19
Вопросов: 2
Ответов: 5
Профиль | | #7
Добавлено: 08.04.11 06:06
"надо запускать в другом потоке, чтобы ничего не останавливалось"
Спасибо за направление. В общем так и получилось. Из основного кода сгенерировал vbs файл, в него отправил строку с "моим" msgbox и запустил этот файл как дочерний процесс EXEC-ом, а дальше уже можно отлавливать его состояние: выполняется-не выполняется и на него реагировать. Как-то дубово конечно, но решает задачу.
Остался вопрос: почему не на все объекты из net framework можно сослаться. Очень хочется понять, если кто подскажет или даст направление - будет здорово.
Номер ответа: 8
Автор ответа:
t0r19
Вопросов: 2
Ответов: 5
Профиль | | #8
Добавлено: 08.04.11 06:10
Извеняюсь, что не увидел ответы на 2-й вопрос. Спасибо.