Что нового

Окна, Диалоги Объединение скриптов RequireAdmin + User

Not4Life

Новичок
Сообщения
1
Репутация
0
У меня есть 3 скрипта. Чаще всего требуется запустить их по очереди т.е. 1 - 2 - 3, но иногда нужно запустить только 1 и 2, а иногда только 1 и 3.
1 и 3 скрипты работают под текущим пользователем, у которого нет прав администратора (User).
2 скрипт работает только под учеткой администратора (Admin), требует ввода пароля.

Я хочу объединить их, но не могу, т.к. в них используются исправления реестровых строк и изменение прав для скрипта, повлечет за собой изменение текущего пользователя для выполнения.
Следовательно вопрос: как объединить скрипты, чтобы в определенный момент скрипта он запросил пароль администратора для продолжения выполнения или создать отдельный (4 скрипт), чтобы были следующие кнопки:
выполнить 1ый скрипт
выполнить 2ой скрипт
выполнить 3ий скрипт
выполнить по очереди (1ый скрипт, после окончания 2ой, после окончания 3ий)?
 

InnI

AutoIT Гуру
Сообщения
4 402
Репутация
1 192
Создайте отдельный скрипт, который будет запускать остальные, и, комментируя строки, регулируйте запуск
Код:
#pragma compile(AutoItExecuteAllowed, True)
RunWait(@AutoItExe & " /AutoIt3ExecuteScript 1.au3")
RunWait(@AutoItExe & " /AutoIt3ExecuteScript 2.au3")
RunWait(@AutoItExe & " /AutoIt3ExecuteScript 3.au3")
Директива #pragma и параметр /AutoIt3ExecuteScript нужны для компилированного скрипта. Если вы не планируете компилировать этот скрипт, то их можно удалить.
 

musicstashall

Новичок
Сообщения
264
Репутация
4
А для чего вообще запускать разные скрипты? Можно запускать один и тот же с параметрами и выполнять различные функции. Например:
Код:
If @Compiled Then $PID = Run(@AutoItExe & ' func StartMainWindow ' & $Gui & ' ' & @AutoItPID & ' ' & $aData[0] & ' "' & $aData[1] & '"')
If Not @Compiled Then $PID = Run(@AutoItExe & ' "' & @ScriptFullPath & '" func StartMainWindow ' & $Gui & ' ' & @AutoItPID & ' ' & $aData[0] & ' "' & $aData[1] & '"')


Переменные, для общего пользования между скриптами, лучше всего поместить в файл памяти:
Код:
Global Const $tagNUMBERSTRUCT = 'uint64 GlobalSize;' & _
                                'uint fCount;' & _
                                'uint dCount;' & _
                                'wchar CurentDir[256];' & _
                                'wchar CurentFile[256];' & _
                                'uint CurentSize;' & _
                                'uint GlobalCount;' & _
                                'uint fLeftSize;' & _
                                'wchar OwnerOrProc[64];' & _
                                'uint msg;' & _
                                'uint extended;' & _
                                'boolean IsPause'
Global $tNUMBERSTRUCT

Func __CREATENUMBERSTRUCT()
    Local $MapFile = _WinAPI_CreateFileMapping(-1, 1192, 'NUMBERSTRUCT')
    Local $PosFile = _WinAPI_MapViewOfFile($MapFile)
    $tNUMBERSTRUCT = DllStructCreate($tagNUMBERSTRUCT, $PosFile)
EndFunc

Func __READNUMBERSTRUCT()
    Local $MapFile = _WinAPI_OpenFileMapping('NUMBERSTRUCT')
    Local $PosFile = _WinAPI_MapViewOfFile($MapFile)
    $tNUMBERSTRUCT = DllStructCreate($tagNUMBERSTRUCT, $PosFile)
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4 402
Репутация
1 192
А для чего вообще запускать разные скрипты?
Потому что так проще. Не все скрипты можно объединить в один. А часто и не нужно. Поэтому они запускаются по очереди в рамках одного "проекта".

Можно запускать один и тот же с параметрами и выполнять различные функции.
Попробуйте передать в качестве параметров, например, объекты GDI+. Если получится - поделитесь кодом.
 

musicstashall

Новичок
Сообщения
264
Репутация
4
Это я у вас и хотел спросить
А в чем, собственно, проблема?? Ну и пусть графика работает в своем процессе монопольно, у нас задача — запустить этот процесс, а в данном случае, не обязательно создавать отдельный скрипт, все можно ( и нужно) писать в одном скрипте, а в параметрах запуска определять функцию, которая будет отрабатывать при запуске, вот и все дела))
 
Верх