По поводу различия панели задач (TaskBar) и панели быстрого запуска (Quick Launch).
Спасибо. Я просто не понял - думал, что ваша фраза о проблеме с выходом относится к моему последнему вопросу. Извините.
Это не так. Во-первых, у меня просто игнорируется выполнение vbs-кода на ранних версиях Windows.
Это не совсем так. В вашем варианте скрипт начинает выполнятся, затем проверяется на какой системе он запущен и, при запуске на ХР, дальше команды не выполняются. Да при этом на ХР никакие действия с ярлыком не выполняются, Но при этом процесс mshta.exe остается висеть в запущенных процессах.
В остальном - полностью согласен. У меня также учитываются %ProgramFiles% и т.п. - просто я решил привести здесь более сокращенный код, чтобы просто показать проблему с mhta, которая меня интересует.
убраны ... и завершающий End If
Ваш пример с mhta без завершающго End If на ХР не работает.
Эта проблема скорее связана с настройками безопасности IE. Советую ещё проверить поведение с javascript.
Я никакой спициалист в javascript, поэтому не знаю, как в нем организовать проверку на ХР. Но это и не важно, т.к. для моих целей javascript не подходит из-за того, что в нем допустимая длина строки в mshta меньше, чем в vbs и постоянно надо конвертировать слеши в путях.
Не знаю насчет настроек безопасности IE, но если упростить скрипт следующим образом
mshta vbscript:Execute("Set WSS=CreateObject(""WScript.Shell""):If WSS.RegRead(""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion"")>""5.1"" Then:msgbox(""Not XP""):End With:close")
, то скрипт отрабатывает так как надо - на ХР msbox не появляется и mshta кратковременно появляется в запущенных процессах и исчезает из них.
Если же вместо
будет
With CreateObject(""SAPI.SpFileStream"") .Open ""%SfxFolder26%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\""&CreateObject(""Shell.Application"").NameSpace(0).ParseName(WSS.Environment(""Process"")(""PROGRAMFILES"")&""\Opera\Opera.exe"").ExtendedProperty(""FileDescription"")&"".lnk"",1:.Seek 21:.Write &H20:.Close:End With
, то с ярлыком, естественно, ничего не будет происходить (да его и нет), но mshta останется висеть в запущенных процессах. Если же виноваты настройки безопасности IE, то почему же они так реагируют на разные куски кода, которые всё равно не выполняются по условию?
Если ничего не выходит, то мой совет включить скрипты в дистрибутив и вызывать их нормальным способом остаётся в силе.
Спасибо. Решение, которое я нашел для данной ситуации я уже привел, но просто хотелось бы разобраться c причинами такого поведения mshta.