- Версия AutoIt
- 3.3.14.5
- Версия
- 0.1
Для гарантии, что программа всегда работает, надёжнее всего запускать её как службу.
Но начиная с Windows 7 в Microsoft решили, что всё что запускается как служба, запускается в скрытой нулевой сессии, и графический интерфейс не доступен.
Я решил эту задачу, используя несколько тем с форумов. Кому актуально, читаем дальше.
Такой вариант иногда может быть необходим, но я в своём примере использую запуск от имени пользователя.
Я запускаю cmd.exe и в окне можно проверить, что программа работает от имени пользователя и получает соответствующую пользовательскую среду.
Но функция определения сессии пользователя для меня работала не корректно, и я нашёл другой вариант.
Этот вариант определения сессии пользователя для меня работает корректно после закрытия сессии и повторного входа. Для индикации что сессия готова, я проверяю наличие процесса explorer.exe.
Это решение для запуска исполняемого файла как службы. Полученная служба корректно отрабатывает остановку и перезапуск. Закрывает нашу программу после остановки. Есть возможность записи в журнал. В функцию _Svc_Main вставляем свой код.
Как этим пользоваться.
-скачиваем файлы ServiceExample.au3, Services.au3, ServicesConstants.au3
- в ту же папку записываем файл psexec.exe из скачанного пакета https://download.sysinternals.com/files/PSTools.zip
-в файле ServiceExample.au3 замените в строке 53 –u ХХХХ на имя пользователя и –p XXXX пароль пользователя.
Можно заменить cmd.exe на вашу программу в строке 40, но для проверки я бы оставил как есть.
- компилируем файл ServiceExample.au3
- через командную строку запускаем файл ServiceExample.exe –i Test
Параметр –i указавает, что нужно создать службу.
Второй параметр указывает имя службы, но я так понял, что он не обязателен.
В нашем случае создаётся служба с именем Autoit Service Test.
Заходим в оснастку служб services.msc, находим нашу службу. В свойствах на первой вкладке задаём автоматический запуск. На вкладке “Вход в систему” переключаем на учётную запись пользователя и вводим те же имя пользователя и пароль, записанные в файле ServiceExample.au3.
- запускаем службу.
Проверяйте, пользуйтесь.
И если кто знает напишите:
- как запустить программу в определённой сессии без использования psexec, а силами Autoit?
- другие способы определить, что пользователь выполнил вход в систему и сессия пользователя готова, не через explorer.exe
Спасибо авторам указанных по ссылкам тем:
ilogic, inververs, arcker и Mark Russinovich (psexec.exe).
Но начиная с Windows 7 в Microsoft решили, что всё что запускается как служба, запускается в скрытой нулевой сессии, и графический интерфейс не доступен.
Я решил эту задачу, используя несколько тем с форумов. Кому актуально, читаем дальше.
- Ссылка https://www.autoitscript.com/forum/topic/161190-run-in-logged-on-user-session-as-system-account/
Такой вариант иногда может быть необходим, но я в своём примере использую запуск от имени пользователя.
Я запускаю cmd.exe и в окне можно проверить, что программа работает от имени пользователя и получает соответствующую пользовательскую среду.
Но функция определения сессии пользователя для меня работала не корректно, и я нашёл другой вариант.
Этот вариант определения сессии пользователя для меня работает корректно после закрытия сессии и повторного входа. Для индикации что сессия готова, я проверяю наличие процесса explorer.exe.
Это решение для запуска исполняемого файла как службы. Полученная служба корректно отрабатывает остановку и перезапуск. Закрывает нашу программу после остановки. Есть возможность записи в журнал. В функцию _Svc_Main вставляем свой код.
Как этим пользоваться.
-скачиваем файлы ServiceExample.au3, Services.au3, ServicesConstants.au3
- в ту же папку записываем файл psexec.exe из скачанного пакета https://download.sysinternals.com/files/PSTools.zip
-в файле ServiceExample.au3 замените в строке 53 –u ХХХХ на имя пользователя и –p XXXX пароль пользователя.
Можно заменить cmd.exe на вашу программу в строке 40, но для проверки я бы оставил как есть.
- компилируем файл ServiceExample.au3
- через командную строку запускаем файл ServiceExample.exe –i Test
Параметр –i указавает, что нужно создать службу.
Второй параметр указывает имя службы, но я так понял, что он не обязателен.
В нашем случае создаётся служба с именем Autoit Service Test.
Заходим в оснастку служб services.msc, находим нашу службу. В свойствах на первой вкладке задаём автоматический запуск. На вкладке “Вход в систему” переключаем на учётную запись пользователя и вводим те же имя пользователя и пароль, записанные в файле ServiceExample.au3.
- запускаем службу.
Проверяйте, пользуйтесь.
И если кто знает напишите:
- как запустить программу в определённой сессии без использования psexec, а силами Autoit?
- другие способы определить, что пользователь выполнил вход в систему и сессия пользователя готова, не через explorer.exe
Спасибо авторам указанных по ссылкам тем:
ilogic, inververs, arcker и Mark Russinovich (psexec.exe).
Сообщение автоматически объединено: