Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создать ярлык, добавить в автозагрузку (http://forum.oszone.net/showthread.php?t=328691)

Полина_Комиссарова@vk 28-07-2017 23:18 2754701

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

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 29-07-2017 00:28 2754707

Цитата:

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

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

Полина_Комиссарова@vk 29-07-2017 12:56 2754759

Цитата:

Цитата Iska
Как производится вызов скрипта на исполнение? »

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

Цитата Полина_Комиссарова@vk
CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Window", WScript.ScriptFullName »


Iska 29-07-2017 20:06 2754798

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

Полина_Комиссарова@vk 29-07-2017 20:13 2754800

Цитата:

Цитата Iska
определитесь. Выше Вы пишете про ярлык, ниже пишете про реестр. Что, за чем, куда — я уже толком перестал понимать. »

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

Цитата Полина_Комиссарова@vk
CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Window", WScript.ScriptFullName »

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

mwz 29-07-2017 23:28 2754819

Цитата:

Цитата Полина_Комиссарова@vk
и пытается создать файл в "C:\Windows\System32\" а не в папке где сам находится(как мне надо) »

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

Полина_Комиссарова@vk 29-07-2017 23:51 2754822

Цитата:

Цитата Полина_Комиссарова@vk
И можно ли указать путь сохранения ярлыка? »

Цитата:

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


Iska 30-07-2017 05:52 2754830

Полина_Комиссарова@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")

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

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

mwz 30-07-2017 09:44 2754839

Iska, насколько я понял, в данной [частной] задаче надо создавать этот ярлык именно в той папке, где расположен сам скрипт.
И тогда надо указывать полный путь не в явном виде, а так, как в батниках делается использованием префикса %~dp0.

Iska 30-07-2017 09:59 2754844

Цитата:

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

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

Цитата:

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

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

mwz 30-07-2017 10:06 2754846

Iska, да я уж вернул свою реплику в исходный вид, поняв что сам запутался. :)

Iska 30-07-2017 11:21 2754866

mwz, бывает. Я сам такой :).


Время: 16:26.

Время: 16:26.
© OSzone.net 2001-