Sesi Interaktif 0 di Windows 7

14

Saya mencoba untuk meluncurkan cmd.exe di sesi 0. Sejauh ini saya telah melakukan berikut ini dari command prompt yang ditinggikan:

sc config UI0Detect start= auto
net start UI0Detect

Dan respons menunjukkan bahwa layanan dimulai dengan benar. Pada titik inilah saya berasumsi jika saya beralih ke sesi 0, cmd.exe akan berjalan.

Saya beralih ke sesi 0 menggunakan perintah berikut:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Ini berhasil mengalihkan saya ke sesi 0, tetapi satu-satunya jendela yang tersedia adalah yang memiliki opsi untuk kembali ke sesi 1.

Bagaimana cara mendapatkan cmd.exe untuk diluncurkan di sesi 0?

omghai2u
sumber
Mengapa Anda ingin melakukan ini? UI0Detect memungkinkan layanan lama memunculkan kotak pesan, bukan memulai Aplikasi GUI baru. cmd.exe memiliki GUI
Peter Hahndorf
6
@PeterHahndorf Saya mengerti bahwa menyenangkan untuk membelokkan menjawab pertanyaan dengan mengatakan "mari kita mundur dan melihat apakah ini yang benar-benar perlu kita lakukan karena ini terdengar seperti ide yang buruk", dan itu adalah cara yang relatif baik untuk merendahkan sesama pengembang. Tapi karena ini untuk skenario debugging dan dimaksudkan untuk perbaikan cepat (dan alternatif untuk menggunakan beberapa aplikasi pihak ke-3 seperti AlwaysUp), saya tidak benar-benar melihat bagaimana menanyakan "mengapa" adalah respons yang membantu. Bagaimanapun, terima kasih.
omghai2u
Saya pikir Peter ada benarnya. Pertanyaan yang seharusnya Anda tulis adalah "Ini yang saya coba lakukan." Perbaikan cepat hanya akan melibatkan rasa sakit di masa depan. Saya tidak dapat menghitung berapa kali saya mendengar "perbaikan cepat" hanya untuk masih melihat "perbaikan cepat" dalam produksi tiga tahun kemudian. . . membutuhkan "perbaikan cepat" yang lain. Saya berasumsi Anda mengetik untuk menjalankan semacam batch script?
surfasb
1
@surfasb Pertanyaan yang Anda sarankan pada dasarnya adalah pertanyaan yang saya tulis: "Saya mencoba meluncurkan cmd.exe di sesi 0." Harap tetap fokus pada pertanyaan itu. Terima kasih. Dan tidak ada kesempatan ini akan membuat jalannya ke produksi, atau untuk itu melibatkan rasa sakit di masa depan. Cara saya melakukannya untuk produksi sudah diatur tetapi saya tidak bisa menggunakannya untuk debugging. Cara saya melakukannya untuk debugging rumit dan melibatkan menggunakan aplikasi pihak ke-3.
omghai2u

Jawaban:

19

Untuk meluncurkan cmd.exe di sesi 0, gunakan psexec dari Sysinternals

psexec.exe -s 0 cmd.exe

Sekarang Anda memiliki konsol berjalan di sesi 0,

Anda juga dapat memulai cmd.exe di sesi 0 dan menampilkan GUI:

psexec.exe -s -i 0 cmd.exe

dengan begitu ketika Anda beralih ke sesi 0, cmd.exe akan menunggu Anda di sana.

Anda memiliki hak sebanyak mungkin di Windows 7:

whoami /all

jika Anda menggunakan PsTools lain, ingatlah untuk menggunakan sakelar / accepteula:

pslist /accepteula

jika tidak, program akan memunculkan kotak pesan untuk meminta untuk menerima Eula, program akan hang karena tidak ada UI di sesi 0 untuk menutup kotak pesan.

Untuk memverifikasi bahwa Anda menjalankan di sesi 0, Anda dapat menggunakan proses qpro:

qprocess /ID:0

Anda akan melihat 'cmd.exe' di antara semua proses layanan.

Peter Hahndorf
sumber
Terima kasih luar biasa karena berusaha menjawab pertanyaan saya. Ini tentu akan berhasil, maksud khusus saya (seperti yang ditunjukkan dalam komentar), namun adalah untuk menghindari penggunaan aplikasi pihak ke-3. Apakah ada cara yang baik untuk melakukan ini yang tidak mengharuskan penggunaan alat SysInternals (atau benar-benar apa pun yang tidak tersedia di Windows)? Terima kasih lagi.
omghai2u
2
Saya tidak menganggap alat Sysinternal 'pihak ketiga' mereka dari Microsoft dan Anda tidak harus menginstalnya.
Peter Hahndorf
Maaf, saya sedang mempertimbangkan sesuatu yang tidak diinstal secara default "pihak ke-3".
omghai2u
Peter Luarbiasa, terimakasih. Berfungsi sempurna untuk memulai proses di sesi 0 (yang artinya tetap berjalan saat Anda logout.)
Daniel James Bryars
5
Baris perintah pertama salah: -sdijalankan sebagai SYSTEMpengguna dan tidak mengambil argumen. Mungkin yang Anda maksudkan -i 0dalam contoh pertama dan -s -i 0yang kedua?
jwg
1

Itu tidak akan berhasil. Itu hanya memulai proses sebagai Sistem.

Layanan adalah program yang ditulis dengan cara khusus untuk menerima perintah dari manajer kontrol layanan.

MS memiliki utilitas yang memungkinkan menjalankan program sebagai layanan. Ini disebut Srvanydan ada di Alat Kit Sumber Daya Windows 2003.

Unduh Windows Server 2003 Resource Kit Tools

David
sumber
0

Saya menemukan solusi secara tidak sengaja suatu hari, tetapi http://www.alex-ionescu.com/?p=59 juga mendokumentasikan solusi yang dekat dengan apa yang saya temukan

Buat file batch dengan yang berikut ini (sebut saja some.bat)

start cmd

Kemudian buat layanan untuk memanggil file batch ini (menggunakan Admin Command Prompt)

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

(Catat spasi setelah setiap =, dan saya sarankan menggunakan path lengkap untuk some.bat)

Maka itu adalah masalah memulai layanan

sc start ui0detect
sc start access0

(Tidak perlu membuat ui0detect auto start dengan sc config UI0Detect start = auto)

Dan jika semuanya berjalan dengan baik, Anda akan mendapatkan kotak flashing pesan yang akan segera terjadi! Pergi ke Lihat Pesan dan Anda akan memiliki Admininstrator (nt authority \ system) Prompt Perintah yang tidak akan dimusnahkan secara otomatis oleh awal layanan yang gagal (karena itu diperlukan file batch dengan perintah mulai)

Ini berhasil, meskipun terkadang tidak berhasil pada percobaan pertama.

Saya percaya ini memberi Anda akses ke sesi interaktif 0 saja, yang hanya ada untuk pengguna sistem nt authority \

Andy
sumber
-2

Anda dapat menggunakan start pintas (Windows) + R untuk memulai dialog 'jalankan'. Dari sana, cukup ketik 'cmd' (tanpa tanda kutip) dan voila. cmd

Y2Forever
sumber
3
Selamat datang di SuperUser. Posting Anda tidak menjawab pertanyaan OP. Memulai secara CMDnormal tidak memasukkannya Session 0.
Saya katakan Reinstate Monica