Что нового

[Сеть, интернет] Создается нерабочий ярлык

F9

Новичок
Сообщения
71
Репутация
2
Всем привет! Не буду разводить демагогию насчет втуплений и тп о себе.. сразу к делу:

AutoIt Sc1
Version 1.79
Apr 16 2010 08:48:29
by Neil Hodgson.

Цель скрипта - работа с файлами на удаленном компе через админский ресурс C$, например
копирование всем заданным юзерам каких то определнных файлов. создание папок на тех ж самых компьютерах и создание ярлыка к папке на рабочем столе того пользователя.

Кусок кода:
Код:
Case $msg = $bash	;~ ======================================================================       МЕНЕДЖЕР - БАШОРИНА	
		$compname="\\ma_sez_comp"
;~ $compname=$array[0]
		$endfile = &$compname"\c$\mail\"&GUICtrlread($combine)&"\"&$resfile
;~ 		БЭКАП
	backup()
	Copy()
		If FileExists($compname&"\c$\mail\"&GUICtrlread($combine)&"\"&$resfile) Then ;если файл конечный существует то пишем ОК и рисуем красивый прогрессбар :)
			GUICtrlSetData($view, "Башорина Л.А. - Скопировано успешно!")
			For $i = 1 To 104 step 5
				GUICtrlSetData ($progress,$i)
			Sleep(1)
			Next
		Else
			GUICtrlSetData($view, "Башорина Л.А. - Ошибка при копировании!")
		EndIf
	Case $msg = $b_z
		$compname="\\ma_sez_comp"
		$z_file = $compname&"\c$\mail\QSCRIPTS\zakaz.bat"
		Run("\\msrv\common\bred3_2k.exe " &$z_file, "", @SW_MAXIMIZE)
		
	Case $msg = $b_p
		$compname="\\ma_sez_comp"
		$p_file = $compname&"\c$\mail\PSCRIPTS\prices.bat"
		Run("\\msrv\common\bred3_2k.exe " &$p_file, "", @SW_MAXIMIZE)
	
	Case $msg = $b_folder
		$compname="\\ma_sez_comp"
		Create_Folder()
;~ 		If BitAnd(GUICtrlRead($link),$GUI_CHECKED) = 1 Then
;~ 	MsgBox("","",BitAnd(GUICtrlRead($link),$GUI_CHECKED) )
;~ 				if $Dir_flag = 1 Then ;если флаг создания директории имеется - то делаем ярлык, а если папка не создана, то и ярлык не создаем
;~ 					FileCreateShortcut("C:\"&GUICtrlRead($Fname), $compname&"\c$\Documents and Settings\MA_Sez\Рабочий стол\" & GUICtrlRead($Fname)&".lnk","C:\"& GUICtrlRead($Fname),"", "", @SystemDir & "\shell32.dll", "", "4", @SW_MINIMIZE)				
;~ 				Else
;~ 				EndIf
;~ 			$Dir_Flag = 0
;~ 		Else
;~ 		EndIf


Конкретно беспокоит FileCreateShortcut. То есть скрипт создает ярлык, но при нажатии на него, винда спрашивает - "Чем открывать будем данный файл" ? В свойствах ярлыка тоже вроде бы всё прописывается ровно... но тем не менее факт... ярылк не запускаемый...
Как будто бы из переменных вставляется не текст в формате string а что-то другое


UPD:
значение fname получаем из $fname = GUICtrlCreateInput ("", 5,65,100,20)

Кто что думает по этому поводу?


Добавлено:
Сообщение автоматически объединено:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Первое на что обратил внимание на скрине:
Тип объекта: "Пусто"
а должно быть
Тип объекта: Папка с файлами
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Когда создаются ярлыки на папки - у них тип объекта бывает и пустой и File Folder - и все варианты работают...
Ну ксттати да... Я не обратил чегой-то внимание на это... А как туда положить нужное знаечение?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
я на окошках уже давно не сижу, но разве рабочая директория не должна быть на уровень выше чем объект на который создается ярлык?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Попробовал добиться такой ситуации у себя.
Вот что выяснилось
Код:
$Folder = "D:\Scripts"; папка на моем локальном ПК
$Shortcut = "\\server\c$\Documents and Settings\Администратор\Рабочий стол\Shortcut Test - 1.lnk";хочу
;создать ярлык на свою папку на сетевом ПК

FileCreateShortcut($Folder, $Shortcut,"", "", @SystemDir & "\shell32.dll", "", "4", @SW_MINIMIZE) 
;и - облом ... (точно такая же ситуация)
;теперь расшариваю папку D:\Scripts на своем локальном ПК и запускаю снова скрипт
;и - заработало
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Хм.... Возможно...
Но немного неправильно установлена цель задачи:
мне надо создавать папку на том ж удаленном компьютере...
а
Код:
FileCreateShortcut("C:\"&GUICtrlRead($Fname)...
пишется именно как C:\
а не \\comp_name именно потому что юзер, запускающий на удаленном компе в своем сеансе этот ярлык, видел в своействах ярлыка именно C:\*что-тотам*
C:\ относится в данном случае именно к его машине...

Так что последний вариант не вариант :scratch:
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
F9 [?]
но при нажатии на него
А как вы на него нажимаете? Через удалённый рабочий стол? Или у себя на компьютере в проводнике? Если у себя, то этот ярлык ссылается на локальную папку C:\11111, а не на папку на удалённом компьютере.
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Нажимает юзер у себя на компе на своем ж рабочем столе. в скриншотах свойства этого ярлыка как видит его юзер у себя.
и ссылается на существующую папку... вроде бы всё верно, но чего то не хватает, не пойму чего

upd:
мне надо создавать папку на том ж удаленном компьютере... и ярлык на созданную папку для пользователя этого ж компьютера. Грубо говоря автоматизировать как если бы я подошёл к нему ноками, создал папку на C:\****Folder потом сделал ярлык для ****Folder
НО! со своего рабочего места, не вставая )
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
Там с ярлыками не всё так просто. При создании ярлыка смотрится путь на той машине, где он создаётся. Если это папка, то создаётся ярлык к папке, в противном случае - к файлу (без расширения). Поэтому попробуйте создать на компьютере, где запускается скрипт, такую же папку, как и на том, где будет создан ярлык. Но если на том компьютере на момент запуска ярлыка не будет папки, то ярлык может привести в вашу папку через админскую шару.
Ещё можно создать ярлык локально и скопировать на удалённую машину. Но путь к папке при создании ярлыка всё равно должен быть.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
InnI
Но путь к папке при создании ярлыка всё равно должен быть
Не работает видимо только для папок, а для файлов я нормально создавал ярлыки при отстутствии объекта к файлу и всегда работало.

F9
Видимо придётся папку создать перед созданием ярлыка.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Еще один способ. Может и подойдет.
Код:
$Folder = "X:\Folder1"

$Shortcut = "X:\Documents and Settings\Администратор\Рабочий стол\Folder1.lnk"

DriveMapAdd("X:", "\\server\C$");подключаем сетевой ресурс как сетевой диск X

DirCreate($Folder);создаем там папку

FileCreateShortcut($Folder, $Shortcut,"", "", @SystemDir & "\shell32.dll", "", "4", @SW_MINIMIZE)

DriveMapDel("X:");отключаем сетевой диск X
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Видимо придётся папку создать перед созданием ярлыка.
Так я ее создаю. на удаленной машине, описал ф-ию с проверкой создания и т.п. мелочей

Код:
Func Create_Folder() 
	
If FileExists($compname&"\c$\"&GUICtrlRead($Fname)) Then   ;если указанная директория уже существует (или пуста)
			GUICtrlSetData($view, "Директория '"&GUICtrlRead($Fname)&"' уже имеется!")
		Else ; иначе - делаем ее !))))
			DirCreate($compname&"\c$\"&GUICtrlRead($Fname))
			Global $Dir_Flag = 1 ; флаг создания директории. 1=есть, 0=нету :)
			$attrib = FileGetAttrib($compname&"\c$\"&GUICtrlRead($Fname))
			If StringInStr($attrib, "D") Then  ;проверяем что мы создали - директорию ли вообще.... 
				GUICtrlSetData($view, "Директория '"&GUICtrlRead($Fname)&"' успешно создана!")
				For $i = 1 To 104 step 5
				GUICtrlSetData ($progress,$i)  ;как обычно рисуем прогресс-бар
				Sleep(1)
				Next
			Else
				GUICtrlSetData($view, "Ошибка создания директории !")
			EndIf
		EndIf

EndFunc


и только после этого пытаюсь создать ярлык на нее же..
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
F9 [?]
пытаюсь создать ярлык на нее же
Скрипт у вас работает на локальной машине. И функция
Код:
FileCreateShortcut("C:\"&GUICtrlRead($Fname), $compname&"\c$\Documents and Settings\MA_Sez\Рабочий стол\" & GUICtrlRead($Fname)&".lnk","C:\"& GUICtrlRead($Fname),"", "", @SystemDir & "\shell32.dll", "", "4", @SW_MINIMIZE)
создаст ярлык для локального объекта "C:\"&GUICtrlRead($Fname) и потом скопирует его на удалённую машину. Поэтому, если нужен ярлык на папку, то папка должна присутствовать на той машине, где работает скрипт. Иначе будет создан ярлык на файл.
Или воспользуйтесь способом Yuriy. У меня он заработал даже без создания папки :scratch:
 
Верх