Windows 7'de Etkileşimli Oturum 0


14

0 oturumu içinde cmd.exe başlatmaya çalışıyorum. Şimdiye kadar yükseltilmiş bir komut isteminden aşağıdakileri yaptım:

sc config UI0Detect start= auto
net start UI0Detect

Yanıt, hizmetin doğru başlatıldığını gösterir. İşte bu noktada seans 0'a geçersem, cmd.exe'nin çalışacağını varsaydım.

Aşağıdaki komutu kullanarak oturum 0'a geçiyorum:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Bu başarıyla beni oturum 0'a geçirir, ancak kullanılabilir olan tek pencere, oturum 1'e geri dönme seçeneğine sahip olandır.

Cmd.exe'nin oturum 0'da başlatılmasını nasıl sağlayabilirim?


Bunu neden yapmak istiyorsun? UI0Detect, eski servislerin yeni GUI Uygulamaları başlatmayacak bir mesaj kutusu açmasına izin verir. cmd.exe GUI'si var
Peter Hahndorf

6
@PeterHahndorf "Cevapsız bir adım geri gidelim ve gerçekten yapmamız gereken şey olup olmadığına bakalım bakalım, çünkü bu kötü bir fikir gibi geliyor" diyerek soruları yanıtlamayı eğlendirmenin eğlenceli olduğunu ve bu sayede diğer geliştiricilere küçümsemenin güzel bir yol olduğunu biliyorum. Ancak bu bir hata ayıklama senaryosu için olduğundan ve hızlı bir düzeltme (ve AlwaysUp gibi bazı üçüncü taraf uygulamalarını kullanmanın alternatifi) anlamına geldiğinden, "neden" diye sormanın ne kadar yararlı bir cevap olduğunu gerçekten anlamıyorum. Yine de teşekkürler.
omghai2u

Sanırım Peter'ın bir noktası var. Yazmanız gereken soru “Yapmaya çalıştığım şey bu”. Hızlı bir düzeltme sadece gelecekteki acıyı içerecektir. “Hızlı düzeltme” yi yalnızca üç yıl sonra üretimdeki “hızlı düzeltme” yi görmek için kaç kez duyduğumu sayamıyorum. . . başka bir "hızlı düzeltme" gerekiyor. Bir tür toplu komut dosyasını çalıştırmak için yazdığınızı varsayıyorum?
surfasb

1
@surfasb Önerdiğiniz soru aslında yazdığım soru: "cmd.exe'yi 0 oturumunda başlatmaya çalışıyorum." Lütfen cevapları bu soruya odaklayın. Teşekkürler. Üstelik bunun üretime girmesi veya gelecekteki acıyı içermesi gibi bir şansı yok. Üretim için yapma biçimim zaten ayarlandı, ancak hata ayıklama için kullanamıyorum. Şu anda hata ayıklama için bunu yapmak çok zordur ve 3. parti bir uygulamayı kullanmayı içerir.
omghai2u

Yanıtlar:


19

Cmd.exe'yi oturum 0'da başlatmak için, Sysinternals'dan psexec kullanın.

psexec.exe -s 0 cmd.exe

Şimdi oturum 0'da çalışan bir konsolunuz var,

cmd.exe'yi 0 oturumunda da başlatabilir ve GUI'yi görüntüleyebilirsiniz:

psexec.exe -s -i 0 cmd.exe

Bu şekilde oturum 0'a geçtiğinizde cmd.exe sizi orada bekliyor olacak.

Windows 7'de alabileceğiniz kadar çok hakka sahipsiniz:

whoami /all

diğer PsTools kullanıyorsanız, / acceptteula anahtarını kullanmayı unutmayın:

pslist /accepteula

aksi takdirde program, Eula'yı kabul etmeyi istemek için bir mesaj kutusu açar, program askıda kalır, çünkü ileti kutusunu kapatmak için oturum 0'da kullanıcı arayüzü yoktur.

Oturum 0'da çalıştığınızı doğrulamak için qprocess kullanabilirsiniz:

qprocess /ID:0

tüm hizmet süreçleri arasında 'cmd.exe' dosyasını göreceksiniz.


Soruma cevap vermeye çalıştığınız için teşekkürler. Bu kesinlikle işe yarar, benim niyetim (yorumlarda belirtildiği gibi), ancak 3. parti uygulamaları kullanmaktan kaçınmaktı. Bunu yapmanın, SysInternals araçlarının kullanımını gerektirmeyen (veya Windows'ta stoklanmayan herhangi bir şeyi) yapmanın iyi bir yolu var mı? Tekrar teşekkürler.
omghai2u

2
Sysinternal araçlarını '3. taraf' Microsoft’a ait olduğunu düşünmüyorum ve bunları yüklemek zorunda değilsiniz.
Peter Hahndorf

Maalesef, varsayılan olarak "3. parti" tarafından yüklenmeyen bir şey düşünüyordum.
omghai2u

Peter. Harika. Teşekkürler. 0 oturumunda bir işlemi başlatmak için mükemmel çalışır (bu, oturumu kapattığınızda çalışmaya devam ettiği anlamına gelir.)
Daniel James Bryars

5
İlk komut satırı yanlıştır: kullanıcı -solarak çalışır SYSTEMve bir argüman almaz. Belki de -i 0birinci örnekte ve -s -i 0ikincisinde demek istedin ?
jwg

1

İşe yaramaz. Sadece bir süreç Sistem olarak başlar.

Servisler, servis kontrol yöneticisinden komutları kabul etmek için özel olarak yazılmış programlardır.

MS, bir programın bir servis olarak çalıştırılmasına izin veren bir yardımcı programa sahiptir. Aradı Srvanyve Windows 2003 Kaynak Seti Araçları'nda.

Windows Server 2003 Kaynak Seti Araçları'nı İndirin


0

Çözümü bir gün kazayla öğrendim, ancak http://www.alex-ionescu.com/?p=59 ayrıca bulduklarımın yakınındaki bir çözümü de belgeliyor

Aşağıdakileri içeren bir toplu iş dosyası oluşturun (buna some.bat adını verin)

start cmd

Ardından bu toplu dosyayı aramak için bir servis oluşturun (bir Yönetici Komut İstemi kullanarak)

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

(Her birinden sonraki boşluğa dikkat edin = ve some.bat için tam yol kullanmanızı öneririz)

O zaman bu hizmetlerin başlatılması meselesi

sc start ui0detect
sc start access0

(Ui0detect işlevini sc config ile otomatik başlatmaya gerek yoktur UI0Detect start = auto)

Ve eğer her şey yolunda giderse, yaklaşan mesajların yanıp sönen kutusunu göreceksiniz! Mesajları Göster'e gidin ve kendinize bir Admininstrator (nt yetkilisi \ system) Komut İstemi, başarısız bir servis başlangıcı tarafından otomatik olarak imha edilmeyecek (bu nedenle start komutuyla bir toplu iş dosyasına ihtiyaç duyulacak) olacak.

Bu işe yarar, ancak bazen ilk denemede işe yaramaz.

Bunun sadece nt otorite \ system kullanıcısı için var olan sadece 0 etkileşimli oturumuna erişim sağladığını düşünüyorum


-2

'Çalıştır' iletişim kutusunu başlatmak için kısayol başlatmasını (Windows) + R kullanabilirsiniz. Oradan, sadece 'cmd' (tırnak işaretleri olmadan) ve işte yazın. cmd


3
SuperUser'a hoş geldiniz. Yayınınız vermez cevap OP soru. Başlangıç CMDnormalde gelmez değil içine bir tane koyun Session 0.
Twisty Impersonator
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.