Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Полина_Комиссарова@vk, как уже выше отметил коллега mwz, дело в том, что Вы совершаете распространённую ошибку, полагая, что текущий каталог всегда будет равен каталогу, где расположен исполняемый файл, скрипт, пакетный файл, документ и т.п. В ряде случаев они могут и совпадать:
Цитата Полина_Комиссарова@vk:
Запускаю файл вручную- все отлично , ярлык создался где надо »
В общем же случае надо помнить, что это совсем не так, и сие надо учитывать.

В Вашем частном случае всё строится именно на таком рассчёте:
Код: Выделить весь код
If objFSO.FileExists(objFSO.GetBaseName(WScript.ScriptName) & ".lnk") …
— проверяется существование файла ярлыка в текущем для исполняемого скрипта каталоге. Когда скрипт запускается Вами «ручками» — текущим каталогом будет каталог скрипта. Когда скрипт запускается из:
Код: Выделить весь код
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
— текущим каталогом будет каталог исполняемого файла wscript.exe. Посему указанный код не найдёт там ранее созданного ярлыка и начнёт его создавать. Разумеется, там же — в %SystemRoot%\System32, поскольку и ниже по коду тот же самый рассчёт:
Код: Выделить весь код
	j =  FSO.GetBaseName(WScript.ScriptName)		        'Название ярлыка
…
	Set f = st.CreateShortcut(j & ".lnk")
Чтобы этого не происходило, надо указывать полные пути.

Опишите Вашу задачу.

Отправлено: 05:52, 30-07-2017 | #8