Інтерактивна сесія 0 в Windows 7


14

Я намагаюся запустити cmd.exe в сеансі 0. Поки я зробив наступне з командного рядка з підвищеним рівнем:

sc config UI0Detect start= auto
net start UI0Detect

І відповідь вказує на те, що послуга була запущена правильно. Саме в цей момент я припустив, що якщо я перейду на сеанс 0, cmd.exe буде запущений.

Я переключаюсь на сеанс 0 за допомогою наступної команди:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Це успішно перемикає мене на 0 сеансу, але єдине доступне вікно - це те, у якому є можливість повернутися до 1 сеансу.

Як змусити запустити cmd.exe в сеанс 0?


Чому б ти хотів це зробити? UI0Detect дозволяє старим службам спливати вікно повідомлень, не запускаючи нові програми GUI. cmd.exe має графічний інтерфейс
Пітер Гандорф

6
@PeterHahndorf Я розумію, що цікаво відхиляти відповіді на питання, кажучи "давайте зробимо крок назад і подивимось, чи це насправді нам потрібно зробити, тому що це звучить як погана ідея", і це відносно приємний спосіб поблажнити своїх розробників. Але оскільки це сценарій налагодження і мав би бути швидким виправленням (і альтернативою використанню стороннього додатка, як-от AlwaysUp), я не розумію, як запитання "чому" є корисною відповіддю. Все одно, дякую.
omghai2u

Я думаю, що в Пітера є пункт. Питання, яке ви мали б написати: "Це те, що я намагаюся зробити". Швидке виправлення залучатиме лише майбутні болі. Я не можу порахувати, скільки разів я чув "швидке виправлення", щоб все ще побачити "швидке виправлення" у виробництві через три роки. . . потребує чергового «швидкого виправлення». Я припускаю, що ви набираєте, щоб запустити якийсь пакетний сценарій?
surfasb

1
@surfasb Питання, яке ви запропонували, - це, по суті, питання, яке я написав: "Я намагаюся запустити cmd.exe в сеансі 0." Будь ласка, тримайте відповіді зосередженими на цьому питанні. Спасибі. І немає жодних шансів, що це пробиється у виробництво, або для того, щоб залучити майбутній біль. Те, як я це роблю для виробництва, уже встановлено, але я не можу використовувати його для налагодження. Те, як я зараз роблю це для налагодження, є громіздким і передбачає використання додатку сторонніх розробників.
omghai2u

Відповіді:


19

Щоб запустити cmd.exe у сеансі 0, використовуйте psexec від Sysinternals

psexec.exe -s 0 cmd.exe

Тепер у вас працює консоль сеансу 0,

ви також можете запустити cmd.exe з сеансу 0 та відобразити графічний інтерфейс:

psexec.exe -s -i 0 cmd.exe

таким чином, коли ви перейдете на сеанс 0, cmd.exe буде чекати вас там.

у вас є стільки прав, скільки ви можете отримати в Windows 7:

whoami /all

якщо ви використовуєте інші PsTools, не забудьте скористатися перемикачем / acceptteula:

pslist /accepteula

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

Щоб переконатися, що ви працюєте в сеансі 0, ви можете використовувати qprocess:

qprocess /ID:0

ви побачите "cmd.exe" серед усіх процесів обслуговування.


Дивовижне дякую за спробу відповісти на моє запитання. Це, безумовно, спрацювало, моє конкретне намір (як зазначено в коментарях), однак було уникати використання сторонніх додатків. Чи є приємний спосіб зробити це, що не потребує використання інструментів SysInternals (або насправді нічого, що не входить у склад Windows)? Знову дякую.
omghai2u

2
Я не вважаю інструменти Sysinternal "сторонніми", вони є від Microsoft, і вам не потрібно їх встановлювати.
Пітер Гандорф

Вибачте, я розглядав що-небудь не встановлене за замовчуванням "стороннє".
omghai2u

Петро. Дивовижний, дякую. Відмінно працює для запуску процесу в сеансі 0 (а це означає, що він продовжує працювати, коли ви
виходите

5
Перший командний рядок неправильний: -sзапускається як SYSTEMкористувач та не бере аргументу. Можливо, ви мали -i 0на увазі в першому прикладі і -s -i 0в другому?
jwg

1

Це не спрацює. Він просто запускає процес як System.

Послуги - це програми, написані спеціальним чином для прийому команд від менеджера управління послугами.

MS має утиліту, яка дозволяє запускати програму як послугу. Він називається Srvanyі знаходиться в Інструментах набору ресурсів Windows 2003.

Завантажте інструменти набору ресурсів Windows Server 2003


0

Я знайшов рішення одного разу випадково, але http://www.alex-ionescu.com/?p=59 також документує рішення, близьке до того, що я знайшов

Створіть пакетний файл із наступним (називайте його some.bat)

start cmd

Потім створіть службу для виклику цього пакетного файлу (використовуючи командний рядок адміністратора)

sc create access0 type= interact type= own binpath= some.bat

(Зауважте пробіл після кожного =, і я пропоную використовувати повний шлях для some.bat)

Тоді справа в запуску послуг

sc start ui0detect
sc start access0

(Немає необхідності робити автоматичний запуск ui0detect з sc config UI0Detect start = auto)

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

Це працює, хоча іноді це не працює з першої спроби.

Я вважаю, що це дає вам доступ лише до інтерактивного сеансу 0, який існує лише для nt повноважень \ користувача користувача системи


-2

Для запуску діалогового вікна "запустити" ви можете скористатись командою "Пуск ярлика" + Windows. Звідти просто введіть 'cmd' (без лапок) і voila. cmd


3
Ласкаво просимо до SuperUser. Ваше повідомлення не відповідає на питання ОП. Починати CMDзвичайно не вводить жодного Session 0.
Я кажу, відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.