Запустіть програму при запуску комп'ютера, коли ніхто не ввійшов у систему, і покажіть вікно, коли хтось увійде в систему (ОС: Windows)


19

У мене є програма, яка запускається при запуску системи за допомогою програми планування завдань на Windows Server 2012. Програма повинна запускатися, навіть якщо комп'ютер перезавантажується автоматично.

Адміністратор - це обліковий запис, який використовується для запуску програми, параметр "Запустити, чи користувач увійшов чи ні" перевіряється на завдання.

Проблема з цим полягає в тому, що коли нарешті хтось увійшов як адміністратор за допомогою підключення до віддаленого робочого столу, інтерфейс (вікно програми) приховано.

Як я розумію, немає способу вирішити це за допомогою Планувальника завдань.

Як я можу це вирішити?

Це має бути досить поширеною проблемою, але я не можу знайти нічого, шукаючи в мережі. Я дуже здивований, що Microsoft допускає таке обмеження у своєму планувальнику. Чи можу я створити VBScript або щось, що працює при запуску і запускає програму, яка потім буде видно, коли користувач насправді входить у систему?

Інші ідеї?

(Я не хочу створювати окрему програму лише для GUI, яка підключається до початкової програми. Я також вважаю за краще, якщо мені не доведеться припиняти вже запущену програму після входу в систему, а потім запускати це знову.)


2
Firedaemon, встановіть додаток як послугу, коли RDPed переключиться на "Сесія 0" за допомогою Firedaemon. Дивіться додаток.
TheCleaner

Це технічно можна зробити, якщо ви розвинете свій власний сервіс.
Райан Різ

1
Щойно відповів на моє власне питання. Однак я не можу прийняти свою власну відповідь протягом двох днів, оскільки система тут на сервері defaultfault.com надзвичайно погана (більшість людей зараз просто відмовиться від цієї сторінки, не чекаючи два дні, і питання назавжди залишиться маркованим як невирішене).
Маркус

2
@Marcus: обмеження щодо того, хто може робити, що і коли має на меті зупинити певні зловживання. На жаль, вони іноді викликають незручності для справжніх спроб зробити все правильно, але іноді такі компроміси потрібно робити. Якщо у вас є пропозиція, яка може покращити ситуацію (захищаючи принаймні так само сайт, але менше приводячи до незручності справжніх користувачів), було б краще задуматися над відповідним "мета" сайтом ( meta.serverfault.com , meta. stackoverflow.com ) замість того, щоб скаржитися в коментарі, що бідонери сайту навряд чи побачать.
Девід Спіллетт

Як видно з голосування, відповідь, яку ви хочете прийняти, не є такою, яку схвалюють люди, тому що шлях, який ви намагаєтеся пройти, це неправильно.
JamesRyan

Відповіді:


28

Зрозумів, як це зробити самостійно. Це дещо вирішення, але саме це я очікував.

стій! Не покидайте ще. Читати далі ...

  • Запустіть його, встановіть його так, щоб адміністратор повинен автоматично входити в систему.

  • Створіть завдання в Планувальнику завдань. Установіть його для запуску лише тоді, коли користувач (адміністратор) увійшов у систему. Тригер - "увійти в систему" і вкажіть, що це лише тоді, коли адміністратор входить.

  • Створіть друге завдання. Запускати лише тоді, коли користувач увійшов у систему, запустіть при вході в систему адміністратора. Дія повинна бути "запустити програму", а програма - "C: \ Windows \ System32 \ rundll32.exe" з полем аргументу, встановленим на "user32.dll, LockWorkStation".

Тепер, якщо ви перезавантажите комп'ютер, це те, що адміністратор автоматично входить у систему, програма, яку ви хочете запустити, запускається, а робоча станція блокується. Якщо я входжу через підключення до віддаленого робочого столу, я можу побачити вікно програми та використовувати графічний інтерфейс. Я можу без проблем заблокувати / розблокувати комп’ютер і відключити / підключити знову як завгодно. Немає жодних проблем, якщо я заходжу на сервер і входжу на фактичну робочу станцію. Оскільки адміністратор вже ввійшов у завдання, він не запуститься знову (він не створює нескінченний цикл для входу, з якого ви не можете вийти).

Просто як це. Зрозуміло, існує один другий часовий період, перш ніж комп'ютер заблокується після автоматичного входу, і я думаю, що про-хакер з фізичним доступом до комп'ютера може зробити щось підлий протягом цього часового вікна, але в моєму випадку я можу не помітити цей ризик безпеки. Поки я не впускаю жодних профі-хакерів у свій будинок і показую їм комп'ютер, система повинна бути відносно безпечною. Перш за все, на комп’ютері не так багато цінності, яка потребує суперзберігаючого захисту, тому я цілком задоволений цим рішенням.


7
Немає неповаги (або знищення), Маркус. Але якщо це дійсно той тип відповіді, який ви шукали, це питання було б більш доречним для SuperUser .
Райан Болгер

2
Нелегко було визначитися з тим, який обмін стеками опублікувати це.
Маркус

Привіт Маркусе, я дотримувався вашої відповіді, але у мене є проблема запустити дві програми з графічним інтерфейсом, а не одну. Я опублікував питання в SuperUser. Якщо ви зможете відповісти на це, це буде чудова допомога - superuser.com/questions/902386/…
користувач2162550

1
Насправді, забороняючи це зараз, тому що НЕ є відповіддю на питання. Питання чітко визначає реєстрацію в полудень - і ваше "рішення" тут робить автоматичний вхід (так що хтось ВІД увійшов). Можливо, не розумне роздуття у питанні, але питання таке, як воно є.
TomTom

1
@TomTom Опція, представлена ​​кінцевому користувачеві, "Запустити, чи користувач увійшов чи ні", безумовно, може означати "Вам не доведеться бути тут, щоб няня переконалася, що вона починається".
Aryeh Leib Taurog

16

У мене є програма, яка запускається при запуску системи за допомогою програми планування завдань на Windows Server 2012. Програма повинна запускатися, навіть якщо комп'ютер перезавантажується автоматично.

Тоді чому ви не зробите це системною послугою, як визначають специфікації Windows?

Як я можу це вирішити?

Ви не можете. Фонові програми не повинні взаємодіяти з інтерфейсом користувача. Або: інтерфейс повинен запускати власну програму, яка потім підключається до служби. Презентація користувальницького інтерфейсу, що працює у користувальницькому просторі користувача, презентація, служба Windows виконує обробку. Ось так розрахована модель, можливо, приблизно 15 років.

Я дуже здивований, що Microsoft допускає таке обмеження у своєму планувальнику.

Мене більше дивує, що ти ніколи не буяв запитати чому.

Існує кілька питань:

  • Коли ввійти кілька людей, хто отримує інтерфейс користувача?
  • Коли користувач виходить із системи, ви вбиваєте програму? ТАКОЖ.
  • Безпека. Фонова програма може працювати з обмеженими правами - піддаючи користувальницький інтерфейс користувачеві, це означає, що користувач може виконувати там код. Модель обміну повідомленнями Windows - ах - повна проблем.

Мені не хочеться створювати окрему програму лише для GUI, яка до речі підключається до початкової програми.

Ні я, ні Microsoft в цей момент не цікавляться тим, що ви хочете робити. Існує створена і підтримувана модель, що дозволяє приєднати обробку фону до користувальницького інтерфейсу користувача - використовувати його чи ні. Але коли ні, не робіть сумнівів щодо проблем безпеки, які ви поставили.


3
Амінь. Я хочу, щоб більше постачальників додатків зрозуміли цю концепцію.
Райан Болгер

15
Нічого, ти не спритний у своєму ставленні. Ну, здогадайтесь, мені не пощастило. Якщо ви невірно поінформовані і хтось має якийсь спосіб вирішити це питання, всі не можуть знати все, щоб ви могли помилитися з абсолютною частиною своєї посади "не можете". Я хотів би залишити це питання відкритим для отримання додаткових відповідей на деякий час довше, на випадок, якщо хтось має рідкісний спосіб поділитися. Ще я прийму вашу відповідь.
Маркус

Наразі все важче надати користувальницький інтерфейс сервісу в сучасних версіях Windows, але це неможливо.
MDMoore313

Його активно не хочуть, оскільки переважно це стосується безпеки. Основна проблема тут полягає в тому, що - і вам це справді потрібно отримати - якщо ви покажете вікно в моєму інтерфейсі, я можу виконати код у вашому процесі. Тоді я можу надсилати вам повідомлення Windows, у яких є ТОН речей, які можна використовувати. Зазвичай це не проблема - тому що якщо це користувацька програма, я можу робити лише те, що я, як користувач, міг .... але якщо сервіс має більші привілеї, тут іде кошмар безпеки. Ось чому це було закрито багато-багато років тому, і кожен, хто вивчив програмування та прочитав документацію, повинен прочитати про це
TomTom

1
Якщо ви дійсно хочете туди піти, ви можете спробувати кроки в coretechnologies.com/WindowsServices/FAQ.html#GUIServices - не впевнені, що вони все ще працюють у поточних вікнах, але є способи зробити доступ до інтерфейсу користувача відкритим - і відкрити всі проблеми безпеки .
TomTom

0

Це все в тому, про Sessionщо працює ваша програма. Якщо ніхто не входить у систему, немає інтерактивного сеансу для відображення під, я вважаю, що він працює під Session 0, який має дивний інтерфейс, який не відображається, як інші.

Тепер, якщо ваша програма виявляє, коли explorer.exeзапускається (чи якийсь інший спосіб виявлення входу користувача) і магічно переосмислює себе або породила якийсь дочірній процес у цій новій сесії, тоді кожен, хто ввійде в систему, з радістю побачить, що ви робите.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.