Показать полную графическую версию : Не срабатывает часть скрипта при его первом запуске
sNc-DAntES
18-04-2017, 13:32
Добрый день. Имеется скрипт:
#include <WinAPIEx.au3>
Opt('WinTitleMatchMode', 2)
run ( @ComSpec & " /c " & """c:\Documents and Settings\lepta\Рабочий стол\Включить Х.cmd""", "")
sleep (10000)
_WinAPI_ShellObjectProperties( "X:\" )
;Запуск свойств диска Х:\ и его расшаривание
WinWait( "[TITLE:Свойства; CLASS:#32770]", "")
ControlClick ( "[TITLE:Свойства; CLASS:#32770]", "", "[CLASS:SysTabControl32; INSTANCE:1]", "main", 1, 205,12)
ControlClick ( "[TITLE:Свойства; CLASS:#32770]", "Если, несмотря на это, вы все равно хотите открыть общий доступ к корневой папке диска, щелкните здесь", "[CLASS:SysLink; INSTANCE:4]", "main", 1, 134,54)
ControlCommand ( "[TITLE:Свойства; CLASS:#32770]", "Открыть о&бщий доступ к этой папке", "Button4", "Check", "")
ControlClick ( "[TITLE:Свойства; CLASS:#32770]", "Локальный общий доступ и безопасность", "Button6", "main", 1)
WinWaitClose ( "[TITLE:Свойства; CLASS:#32770]", "Локальный общий доступ и безопасность")
;Закрыть торрент, если он запущен
If ProcessExists ("uTorrent.exe") Then
ProcessClose ( "uTorrent.exe" )
EndIf
Проблема состоит в том, что диск ни в какую не хочет расшириваться при первом запуске скрипта. Если отключить диск и снова запустить скрипт, то всё отлично срабатывает. Подскажите, пожалуйста, в чём может быть проблема?
sNc-DAntES, а зачем вам такая свалка - и батник, и кликанье? Не проще скриптом делать то же, что делает Включить Х.cmd, а ControlClick() заменить на старую добрую net share?
Для начала заменить Run() на RunWait() не пробовали? И ждать придётся не 10 секунд, а ровно столько, сколько нужно.
заменить на старую добрую net share? »
…или использовать Wbem посредством вызова метода .Create() класса Win32_Share.
sNc-DAntES
19-04-2017, 10:57
oz84, просто я дерево и знания мои об Autoit весьма поверхностные. net share на Windows XP не имеет параметра /GRANT, то есть нельзя сделать шару только для чтения.
Не проще скриптом делать то же, что делает Включить Х.cmd »
батник делает следующее:
"c:\Program Files\Totalcmd\Utils\-=MySys=-\TrueCrypt\TrueCrypt.exe" /v d:\Lepta.tc /lx /a /p пароль /q
То есть, монтирует диск с помощью TrueCrypt. Не получилось у меня сделать это с помощью скрипта.
Для начала заменить Run() на RunWait() не пробовали? И ждать придётся не 10 секунд, а ровно столько, сколько нужно. »
Спасибо, попробую.
…или использовать Wbem посредством вызова метода .Create() класса Win32_Share. »
Это выходит далеко за границы моих знаний, к сожалению.
Это выходит далеко за границы моих знаний, к сожалению. »
Ну, попробуйте разобраться (пример на WSH): Script Create a Shared Folder and Assign Share Permissions (https://gallery.technet.microsoft.com/scriptcenter/6309d93b-fcc3-4586-b102-a71415244712). Всяко лучше, нежели эмулировать тыканье мышкой.
sNc-DAntES
20-04-2017, 10:56
Iska, то есть начать изучать другой скриптовый язык? :) Как вариант, конечно, можно, но может есть вариант с помощью Autoit? Мне кажется лучше здесь изучить вопрос чуть глубже, чем начинать учить новый язык. Буду благодарен, если посоветуете, что почитать по данному вопросу тогда?
sNc-DAntES, код из VBScript WSH практически один-в-один переводится на AutoIt. Можете попросить в Русское сообщество AutoIt (http://autoit-script.ru/), чтобы Вам перевели, или дали иной код.
sNc-DAntES
21-04-2017, 10:25
Для начала заменить Run() на RunWait() не пробовали? И ждать придётся не 10 секунд, а ровно столько, сколько нужно. »
После этого изменения, кстати, окно со свойствами диска вообще перестало появляться.
sNc-DAntES, а диск вообще монтируется после этого?
Бегло погуглил: разве нельзя просто смонтировать контейнер только на чтение? (К слову, в нагугленном было, что при использовании /v и /q параметр /a становится бесполезным, убрал.) Наверное, можно и батник написать, но раз уж в разделе AutoIt, я бы попробовал как-то так (с проверками по привычке)
#NoTrayIcon
If FileExists('X:\') Then
MsgBox(48 + 4096, 'Расшаривание X:\', 'Диск X:\ уже существует!')
Else
FileChangeDir('C:\Program Files\Totalcmd\Utils\-=MySys=-\TrueCrypt')
RunWait('TrueCrypt.exe /v D:\Lepta.tc /l x /m ro /p пароль /q', '', @SW_HIDE)
While 1
If FileExists('X:\') Then ExitLoop
Sleep(150)
WEnd
RunWait(@ComSpec & ' /C net share ShareX=X:\', '', @SW_HIDE)
MsgBox(48 + 4096, 'Расшаривание X:\', 'Вроде сработало?')
EndIf
Или вместо сообщения просто попробовать открыть, как-то так
Run('explorer.exe "\\' & @ComputerName & '\ShareX"')
P.S. FileChangeDir(), думаю, не обязательно, просто чтобы строку подсократить.
sNc-DAntES
24-04-2017, 12:31
oz84, Я вставил ваш код в SciTE, жму F5 и не происходит вообще ничего. Я делаю, что-то не так?
sNc-DAntES, наверное, требуются права админа? Попробуйте добавить второй строкой
#RequireAdmin
sNc-DAntES
24-04-2017, 15:45
наверное, требуются права админа? Попробуйте добавить второй строкой »
Да нет, я на ХР, тут с этим проще. Добавил, ничего не изменилось.
sNc-DAntES, вот в таком виде
#NoTrayIcon
Local $iCount = 0
If FileExists('X:\') Then
MsgBox(48 + 4096, 'Расшаривание X:\', 'Диск X:\ уже существует!')
Else
FileChangeDir('C:\Temp\True Crypt')
RunWait('TrueCrypt.exe /v C:\Temp\123.tc /lx /m ro /p 123 /q', '', @SW_HIDE)
While 1
If $iCount >= 10000 Then
MsgBox(48 + 4096, 'Расшаривание X:\', 'Запуск TrueCrypt почему-то не сработал!')
Exit
EndIf
If FileExists('X:\') Then ExitLoop
$iCount += 200
Sleep(200)
WEnd
RunWait(@ComSpec & ' /C net share ShareX=X:\', '', @SW_HIDE)
MsgBox(64 + 4096, 'Расшаривание X:\', 'Готово!')
EndIf
у меня срабатывает на WinXP SP3 и WinXP SP2. Диск расшаривается, изменение файлов разрешено, но т.к. монитрование в режиме только чтения - получаю отлуп.
Если запустить cmd и последовательно вставить
cd /d "'C:\Program Files\Totalcmd\Utils\-=MySys=-\TrueCrypt"
TrueCrypt.exe /v D:\Lepta.tc /lx /m ro /p пароль /q
net share ShareX=X:\
сработает?
sNc-DAntES
25-04-2017, 10:13
вот в таком виде »
Снова ничего. Если скрипт сохранить и запустить, то выдаёт ошибку в 9 строке: "Unterminated string"
сли запустить cmd и последовательно вставить »
Да, тогда диск монтируется но с полными правами. Монтировать диск в режиме чтения не вариант, т.к. иногда мне нужно давать полный доступ, а в этом случае диск придётся перемонтировать.
sNc-DAntES, покажите вашу 9ю строку из скрипта, т.к. моя определённо "terminated".
Вариант переписать на AutoIt предложеный выше VBS-скрипт или оказаться от AutoIt и добавить в него монтирование и расшаривание не рассматривали? Честно говоря, у меня опыта немного, а протокол SMB не люблю и не было необходимости разбираться и, почти, пользоваться. Возможно, всё можно попроще разрулить на уровне прав NTFS, если в контейнере используется NTFS?
sNc-DAntES
26-04-2017, 10:27
RunWait('TrueCrypt.exe "/v d:\Lepta2.pgd /lx /m ro /p 123 /q', пароль", @SW_HIDE)
sNc-DAntES, у Вас кавычки не согласованы — раз, и синтаксис функции неправильный — два.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.