VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Аватара пользователя
Полина_Комиссарова@vk

VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Полина_Комиссарова@vk »

Вопрос может и слишком нубский, но все же.

Есть ТЕСТОВЫЙ вбсник суть которого состоит в том, чтобы создать ярлык(ярлык себя же - это только для примера) и добавить себя в автозагрузку при этом проверяя наличие ярлыка.



Код:

Код: Выделить всё

Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists(FSO.GetBaseName(WScript.ScriptName) & ".lnk") then	'проверка наличия .lnk
	wscript.echo "yes"
else
		wscript.echo "no, add"							'создание .lnk
	Set st = CreateObject("WScript.Shell")
		j =  FSO.GetBaseName(WScript.ScriptName)		        'Название ярлыка
		c = ".lnk"										'Описание Ярлыка
		h =  WScript.ScriptFullName						'Суть к файлу для которого создается ярлык
		e = "14"										'Номер иконки ярлыка
	Set f = st.CreateShortcut(j & ".lnk")
		f.Description = c
		f.IconLocation = "shell32.dll," & e 
		f.TargetPath = h
		f.save()
end if
CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Window", WScript.ScriptFullName

Проблема состоит в том , что при запуске ПК ярлык вбс проверяет и создает файл не в своей папке (из которой был произведен запуск) а в "C:\Windows\System32\"

Где в коде ошибка?

И можно ли указать путь сохранения ярлыка?
Аватара пользователя
Iska

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Iska »

Цитата Полина_Комиссарова@vk:



при запуске ПК ярлык вбс проверяет и создает файл не в своей папке (из которой был произведен запуск) а в "C:\Windows\System32\"
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




Как производится вызов скрипта на исполнение?
Аватара пользователя
mwz

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение mwz »

Цитата Iska:



Как производится вызов скрипта на исполнение?
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




После перезагрузки ПК скрипт запускается из рееста


Цитата Полина_Комиссарова@vk:



CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Window", WScript.ScriptFullName
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку
Аватара пользователя
Полина_Комиссарова@vk

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Полина_Комиссарова@vk »

Полина_Комиссарова@vk, определитесь. Выше Вы пишете про ярлык, ниже пишете про реестр. Что, за чем, куда — я уже толком перестал понимать.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Iska »

Цитата Iska:



определитесь. Выше Вы пишете про ярлык, ниже пишете про реестр. Что, за чем, куда — я уже толком перестал понимать.
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




Запускаю файл вручную- все отлично , ярлык создался где надо и добавляет себя в реестр


Цитата Полина_Комиссарова@vk:



CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Window", WScript.ScriptFullName
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




после перезагрузки ПК файл загружается из автозагрузки и пытается создать файл в "C:\Windows\System32\" а не в папке где сам находится(как мне надо)
Аватара пользователя
Iska

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Iska »

Цитата Полина_Комиссарова@vk:



и пытается создать файл в "C:\Windows\System32\" а не в папке где сам находится(как мне надо)
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




А где вы в скрипте сказали, что надо в его папке создавать файл??

Не надо путать папку, из которой запускается программа (или скрипт), с её рабочей папкой, которая в общем случае не совпадает с папкой запуска.
Аватара пользователя
mwz

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение mwz »

Цитата Полина_Комиссарова@vk:



И можно ли указать путь сохранения ярлыка?
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку





Цитата mwz:



А где вы в скрипте сказали, что надо в его папке создавать файл??
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку
Аватара пользователя
Полина_Комиссарова@vk

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Полина_Комиссарова@vk »

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


Цитата Полина_Комиссарова@vk:



Запускаю файл вручную- все отлично , ярлык создался где надо
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




В общем же случае надо помнить, что это совсем не так, и сие надо учитывать.



В Вашем частном случае всё строится именно на таком рассчёте:



Код:

Код: Выделить всё

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")

Чтобы этого не происходило, надо указывать полные пути.



Опишите Вашу задачу.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение Iska »

Iska, насколько я понял, в данной [частной] задаче надо создавать этот ярлык именно в той папке, где расположен сам скрипт.

И тогда надо указывать полный путь не в явном виде, а так, как в батниках делается использованием префикса %~dp0.
Аватара пользователя
mwz

Re: VBS/WSH/JS - Создать ярлык, добавить в автозагрузку

Сообщение mwz »

Цитата mwz:



Iska, насколько я понял, в данной [частной] задаче надо создавать этот ярлык именно в той папке, где расположен сам скрипт.
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




Вот мне бы хотелось послушать про саму задачу.




Цитата mwz:



И тогда надо указывать полный путь не в явном виде, а так, как в батниках делается использованием префикса %~dp0, т.е. созданием объекта WScript.FullName или для большей универсальности (тогда путь и имя скрипта будут разделены) — с использованием WScript.Path
VBS/WSH/JS - Создать ярлык, добавить в автозагрузку




Не то. Это пути к исполнителю — wscript.exe/cscript.exe. Путь к каталогу скрипта — objFSO.GetParentFolderName(WScript.ScriptFullName).
Ответить

Вернуться в «Скриптовые языки администрирования Windows»