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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Не срабатывает часть скрипта при его первом запуске (http://forum.oszone.net/showthread.php?t=326061)

sNc-DAntES 18-04-2017 13:32 2730329

Не срабатывает часть скрипта при его первом запуске
 
Добрый день. Имеется скрипт:
Скрытый текст

Код:

#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



Проблема состоит в том, что диск ни в какую не хочет расшириваться при первом запуске скрипта. Если отключить диск и снова запустить скрипт, то всё отлично срабатывает. Подскажите, пожалуйста, в чём может быть проблема?

oz84 18-04-2017 14:38 2730354

sNc-DAntES, а зачем вам такая свалка - и батник, и кликанье? Не проще скриптом делать то же, что делает Включить Х.cmd, а ControlClick() заменить на старую добрую net share?

Для начала заменить Run() на RunWait() не пробовали? И ждать придётся не 10 секунд, а ровно столько, сколько нужно.

Iska 18-04-2017 21:09 2730487

Цитата:

Цитата oz84
заменить на старую добрую net share? »

…или использовать Wbem посредством вызова метода .Create() класса Win32_Share.

sNc-DAntES 19-04-2017 10:57 2730638

oz84, просто я дерево и знания мои об Autoit весьма поверхностные. net share на Windows XP не имеет параметра /GRANT, то есть нельзя сделать шару только для чтения.
Цитата:

Цитата oz84
Не проще скриптом делать то же, что делает Включить Х.cmd »

батник делает следующее:
Скрытый текст

Код:

"c:\Program Files\Totalcmd\Utils\-=MySys=-\TrueCrypt\TrueCrypt.exe" /v d:\Lepta.tc /lx /a /p пароль /q


То есть, монтирует диск с помощью TrueCrypt. Не получилось у меня сделать это с помощью скрипта.

Цитата:

Цитата oz84
Для начала заменить Run() на RunWait() не пробовали? И ждать придётся не 10 секунд, а ровно столько, сколько нужно. »

Спасибо, попробую.

Цитата:

Цитата Iska
…или использовать Wbem посредством вызова метода .Create() класса Win32_Share. »

Это выходит далеко за границы моих знаний, к сожалению.

Iska 20-04-2017 05:12 2730849

Цитата:

Цитата sNc-DAntES
Это выходит далеко за границы моих знаний, к сожалению. »

Ну, попробуйте разобраться (пример на WSH): Script Create a Shared Folder and Assign Share Permissions. Всяко лучше, нежели эмулировать тыканье мышкой.

sNc-DAntES 20-04-2017 10:56 2730903

Iska, то есть начать изучать другой скриптовый язык? :) Как вариант, конечно, можно, но может есть вариант с помощью Autoit? Мне кажется лучше здесь изучить вопрос чуть глубже, чем начинать учить новый язык. Буду благодарен, если посоветуете, что почитать по данному вопросу тогда?

Iska 20-04-2017 11:41 2730929

sNc-DAntES, код из VBScript WSH практически один-в-один переводится на AutoIt. Можете попросить в Русское сообщество AutoIt, чтобы Вам перевели, или дали иной код.

sNc-DAntES 21-04-2017 10:25 2731163

Цитата:

Цитата oz84
Для начала заменить Run() на RunWait() не пробовали? И ждать придётся не 10 секунд, а ровно столько, сколько нужно. »

После этого изменения, кстати, окно со свойствами диска вообще перестало появляться.

oz84 21-04-2017 15:16 2731238

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 2731956

oz84, Я вставил ваш код в SciTE, жму F5 и не происходит вообще ничего. Я делаю, что-то не так?

oz84 24-04-2017 14:27 2731978

sNc-DAntES, наверное, требуются права админа? Попробуйте добавить второй строкой
Код:

#RequireAdmin

sNc-DAntES 24-04-2017 15:45 2732001

Цитата:

Цитата oz84
наверное, требуются права админа? Попробуйте добавить второй строкой »

Да нет, я на ХР, тут с этим проще. Добавил, ничего не изменилось.

oz84 24-04-2017 23:49 2732095

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 2732146

Цитата:

Цитата oz84
вот в таком виде »

Снова ничего. Если скрипт сохранить и запустить, то выдаёт ошибку в 9 строке: "Unterminated string"
Цитата:

Цитата oz84
сли запустить cmd и последовательно вставить »

Да, тогда диск монтируется но с полными правами. Монтировать диск в режиме чтения не вариант, т.к. иногда мне нужно давать полный доступ, а в этом случае диск придётся перемонтировать.

oz84 25-04-2017 22:25 2732335

sNc-DAntES, покажите вашу 9ю строку из скрипта, т.к. моя определённо "terminated".

Вариант переписать на AutoIt предложеный выше VBS-скрипт или оказаться от AutoIt и добавить в него монтирование и расшаривание не рассматривали? Честно говоря, у меня опыта немного, а протокол SMB не люблю и не было необходимости разбираться и, почти, пользоваться. Возможно, всё можно попроще разрулить на уровне прав NTFS, если в контейнере используется NTFS?

sNc-DAntES 26-04-2017 10:27 2732412

Код:

RunWait('TrueCrypt.exe "/v d:\Lepta2.pgd /lx /m ro /p 123 /q', пароль", @SW_HIDE)

Iska 26-04-2017 10:58 2732420

sNc-DAntES, у Вас кавычки не согласованы — раз, и синтаксис функции неправильный — два.


Время: 23:18.

Время: 23:18.
© OSzone.net 2001-