Câu hỏi Phiên tương tác 0 trong Windows 7


Tôi đang cố gắng để khởi động cmd.exe trong phiên 0. Cho đến nay tôi đã thực hiện như sau từ một dấu nhắc lệnh nâng lên:

sc config UI0Detect start= auto
net start UI0Detect

Và phản hồi cho biết dịch vụ đã được bắt đầu chính xác. Đó là vào thời điểm này mà tôi giả định nếu tôi chuyển sang phiên 0, cmd.exe sẽ chạy.

Tôi chuyển sang phiên 0 bằng lệnh sau:

rundll32 winsta.dll,WinStationSwitchToServicesSession

Điều này chuyển thành công cho phiên 0, nhưng cửa sổ duy nhất có sẵn là phiên có tùy chọn quay lại phiên 1.

Làm thế nào để tôi nhận được cmd.exe để khởi động trong phiên 0?


14
2018-05-21 04:10


gốc


Tại sao bạn muốn làm điều này? UI0Detect cho phép các dịch vụ cũ bật lên một hộp tin nhắn, không bắt đầu các ứng dụng GUI mới. cmd.exe có GUI - Peter Hahndorf
@PeterHahndorf Tôi hiểu rằng thật thú vị khi làm chệch hướng câu trả lời bằng cách nói "chúng ta hãy lùi lại một bước và xem đây có phải là điều chúng tôi thực sự cần phải làm hay không vì đây có vẻ là một ý tưởng tồi". Nhưng vì đây là một kịch bản gỡ lỗi và có nghĩa là sửa chữa nhanh (và thay thế cho việc sử dụng một số ứng dụng của bên thứ ba như AlwaysUp), tôi không thực sự thấy cách hỏi "tại sao" là một phản hồi hữu ích. Dù sao cũng cảm ơn bạn. - omghai2u
Tôi nghĩ Peter có một điểm. Câu hỏi bạn nên viết là "Đây là những gì tôi đang cố gắng làm." Một sửa chữa nhanh chóng sẽ chỉ liên quan đến cơn đau trong tương lai. Tôi không thể đếm bao nhiêu lần tôi đã nghe "sửa chữa nhanh" chỉ để xem "sửa chữa nhanh" trong sản xuất ba năm sau đó. . . cần một "sửa chữa nhanh" khác. Tôi giả sử bạn đang gõ để chạy một tập lệnh batch của một số loại? - surfasb
@surfasb Câu hỏi mà bạn đề xuất về cơ bản là câu hỏi tôi đã viết: "Tôi đang cố khởi chạy cmd.exe trong phiên 0." Hãy giữ câu trả lời tập trung vào câu hỏi đó. Cảm ơn. Và sẽ không có cơ hội nào được đưa vào sản xuất, hoặc vì nó liên quan đến đau đớn trong tương lai. Cách tôi làm nó cho sản xuất đã được thiết lập nhưng tôi không thể sử dụng nó để gỡ lỗi. Cách tôi hiện làm để gỡ lỗi là cồng kềnh và liên quan đến việc sử dụng ứng dụng của bên thứ 3. - omghai2u


Các câu trả lời:


Để khởi động cmd.exe trong phiên 0, hãy sử dụng psexec từ Sysinternals

psexec.exe -s 0 cmd.exe

Bây giờ bạn có một bàn điều khiển đang chạy trong phiên 0,

bạn cũng có thể bắt đầu cmd.exe trong phiên 0 và hiển thị GUI:

psexec.exe -s -i 0 cmd.exe

theo cách đó khi bạn chuyển sang phiên 0, cmd.exe sẽ đợi bạn ở đó.

bạn có nhiều quyền như bạn có thể nhận được trong Windows 7:

whoami /all

nếu bạn sử dụng PsTools khác, hãy nhớ sử dụng công tắc / accepteula:

pslist /accepteula

nếu không chương trình bật lên một hộp thông báo để yêu cầu chấp nhận Eula, chương trình sẽ treo vì không có giao diện người dùng trong phiên 0 để đóng hộp tin nhắn.

Để xác minh rằng bạn đang chạy trong phiên 0, bạn có thể sử dụng qprocess:

qprocess /ID:0

bạn sẽ thấy 'cmd.exe' của bạn trong số tất cả các quy trình dịch vụ.


18
2018-05-23 20:35



Cảm ơn tuyệt vời vì đã cố gắng trả lời câu hỏi của tôi. Điều này chắc chắn sẽ làm việc, ý định cụ thể của tôi (như đã chỉ ra trong các ý kiến), tuy nhiên là để tránh sử dụng các ứng dụng của bên thứ 3. Có cách nào tốt đẹp để làm điều này mà không đòi hỏi việc sử dụng các công cụ SysInternals (hoặc thực sự bất cứ điều gì mà không đến cổ phiếu trên Windows)? Cảm ơn một lần nữa. - omghai2u
Tôi không xem xét 'bên thứ 3 của công cụ Sysinternal' họ đến từ Microsoft và bạn không phải cài đặt chúng. - Peter Hahndorf
Rất tiếc, tôi đã xem xét mọi thứ không được cài đặt theo mặc định "bên thứ ba". - omghai2u
Peter. Tuyệt vời, cảm ơn bạn. Hoạt động hoàn hảo để bắt đầu quá trình trong phiên 0 (có nghĩa là nó tiếp tục chạy khi bạn đăng xuất.) - Daniel James Bryars
Dòng lệnh đầu tiên là sai: -s chạy như SYSTEM người dùng và không tham gia một đối số. Có lẽ ý bạn là -i 0 trong ví dụ đầu tiên và -s -i 0 trong cái thứ hai? - jwg


Nó sẽ không hoạt động. Nó chỉ đơn thuần là bắt đầu một tiến trình với tư cách là Hệ thống.

Các dịch vụ là các chương trình được viết theo cách đặc biệt để chấp nhận các lệnh từ trình quản lý điều khiển dịch vụ.

MS có một tiện ích cho phép chạy một chương trình như một dịch vụ. Nó được gọi là Srvany và có trong Windows 2003 Resource Kit Tools.

Tải xuống công cụ Kit tài nguyên Windows Server 2003


1
2017-07-18 09:40





Tôi đã khám phá ra giải pháp một cách tình cờ một ngày, nhưng http://www.alex-ionescu.com/?p=59 cũng ghi lại một giải pháp gần với những gì tôi tìm thấy

Tạo một tập tin thực thi với những điều sau đây (gọi nó là some.bat)

start cmd

Sau đó tạo một dịch vụ để gọi tệp lô này (sử dụng Dấu nhắc lệnh quản trị)

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

(Lưu ý không gian sau mỗi =, và tôi đề nghị sử dụng đường dẫn đầy đủ cho some.bat)

Sau đó, đó là vấn đề bắt đầu các dịch vụ

sc start ui0detect
sc start access0

(Không cần phải tự động khởi động ui0detect với cấu hình sc UI0Detect start = auto)

Và nếu mọi thứ suôn sẻ, bạn sẽ nhận được hộp thông báo sắp xảy ra! Tới Xem tin nhắn và bạn sẽ có cho mình một Admininstrator (nt authority \ system) Command Prompt sẽ không bị tự động phá hủy bởi một khởi động dịch vụ không thành công (do đó cần một tập tin batch với lệnh bắt đầu)

Điều này không hoạt động, mặc dù đôi khi nó không hoạt động lần đầu tiên.

Tôi tin rằng điều này cho phép bạn truy cập vào phiên tương tác 0 chỉ, chỉ tồn tại đối với người dùng nt authority \ system


0
2017-07-31 22:31





Bạn có thể sử dụng phím tắt bắt đầu (Windows) + R để bắt đầu hộp thoại 'chạy'. Từ đó, chỉ cần gõ 'cmd' (không có dấu ngoặc kép) và thì đấy. cmd


-2
2018-01-01 22:50



Chào mừng bạn đến với SuperUser. Bài đăng của bạn không câu trả lời câu hỏi OPs. Bắt đầu CMD bình thường không phải đặt một Session 0. - Twisty Impersonator