|
MSScriptControl не очищаются внутренние переменные | ☑ | ||
---|---|---|---|---|
0
TTM
19.09.11
✎
15:15
|
Есть функция. В ней идет подрят 2 обращения к объекту ("MSScriptControl.ScriptControl". После первого обращения во втором объекте всегда висят переменные WshShell, OsVer, а нужные переменнные (ProductName, EditionID, CSDVersion, BuildLab) не видны.
С чем может быть связана такая ситуация? Собственно функция(как пример): Функция ПолучитьОписаниеОС() СтруктураОписаниеОС = Новый Структура; // получим версию ядра ОС Попытка ЯдроScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl"); ЯдроScrptCtrl.Language = "vbscript"; ЯдроScrptCtrl.AddCode(" |Dim WshShell, OsVer |Set WshShell = CreateObject(""WScript.Shell"") |OsVer = WshShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"") |Set WshShell = Nothing |"); ВерсияЯдраОС = СокрЛП(ЯдроScrptCtrl.CodeObject.OsVer); ЯдроScrptCtrl = Неопределено; Исключение Сообщить(ОписаниеОшибки()); Возврат СтруктураОписаниеОС; КонецПопытки; Попытка ПодстрокаВерсияЯдраОС = Лев(ВерсияЯдраОС,1); ОСScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl"); ОСScrptCtrl.Language = "vbscript"; Код = "Dim WshShell, ProductName, EditionID, CSDVersion, BuildLab |Set WshShell = CreateObject(""WScript.Shell"") |ProductName = WshShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName"") |CSDVersion = WshShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion"")"; Если ПодстрокаВерсияЯдраОС = "6" Тогда Код = Код + " |EditionID = WshShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EditionID"")"; КонецЕсли; Код = Код + " |BuildLab = WshShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\BuildLab"") |Set WshShell = Nothing"; ОСScrptCtrl.AddCode(Код); ProductName = СокрЛП(ОСScrptCtrl.CodeObject.ProductName); CSDVersion = СокрЛП(ОСScrptCtrl.CodeObject.CSDVersion); BuildLab = СокрЛП(ОСScrptCtrl.CodeObject.BuildLab); Попытка EditionID = СокрЛП(ОСScrptCtrl.CodeObject.EditionID); Исключение EditionID = ""; КонецПопытки; СтруктураОписаниеОС.Вставить("ProductName", ProductName); СтруктураОписаниеОС.Вставить("CSDVersion", CSDVersion); СтруктураОписаниеОС.Вставить("BuildLab", BuildLab); СтруктураОписаниеОС.Вставить("EditionID", EditionID); Возврат СтруктураОписаниеОС; Исключение Сообщить(ОписаниеОшибки()); Возврат СтруктураОписаниеОС; КонецПопытки; КонецФункции |
|||
1
aleks-id
19.09.11
✎
15:21
|
а сразу сделать
ОСScrptCtrl = Новый COMОбъект("WScript.Shell"); и с ним уже мутить религия не позволяет? |
|||
2
andrewks
19.09.11
✎
15:22
|
а раны тут точно не нужны?
|
|||
3
TTM
19.09.11
✎
15:25
|
(1) можно, но почему так не работает?
|
|||
4
TTM
19.09.11
✎
15:26
|
(2) Да, можно попробывать
|
|||
5
aleks-id
19.09.11
✎
15:27
|
(3) видимо потому что у тебя из одного кома создается второй ком и при убиении первого второй сам не убивается.
|
|||
6
aleks-id
19.09.11
✎
15:27
|
>>попробывать
закрыл ветку. больше читать не буду. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |