Что нового

Окна, Диалоги Объединение скриптов 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,922
Репутация
1,432
Создайте отдельный скрипт, который будет запускать остальные, и, комментируя строки, регулируйте запуск
Код:
#pragma compile(AutoItExecuteAllowed, True)
RunWait(@AutoItExe & " /AutoIt3ExecuteScript 1.au3")
RunWait(@AutoItExe & " /AutoIt3ExecuteScript 2.au3")
RunWait(@AutoItExe & " /AutoIt3ExecuteScript 3.au3")
Директива #pragma и параметр /AutoIt3ExecuteScript нужны для компилированного скрипта. Если вы не планируете компилировать этот скрипт, то их можно удалить.
 

musicstashall

Знающий
Сообщения
322
Репутация
7
А для чего вообще запускать разные скрипты? Можно запускать один и тот же с параметрами и выполнять различные функции. Например:
Код:
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,922
Репутация
1,432
А для чего вообще запускать разные скрипты?
Потому что так проще. Не все скрипты можно объединить в один. А часто и не нужно. Поэтому они запускаются по очереди в рамках одного "проекта".

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

musicstashall

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