Phiên tương tác 0 trong Windows 7


14

Tôi đang cố gắng khởi chạy cmd.exe trong phiên 0. Cho đến nay tôi đã thực hiện các thao tác sau từ dấu nhắc lệnh nâng cao:

sc config UI0Detect start= auto
net start UI0Detect

Và phản hồi chỉ ra rằng dịch vụ đã được bắt đầu một cách chính xác. Tại thời điểm này, tôi đã giả sử 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 thành công chuyển tôi sang phiên 0, nhưng cửa sổ duy nhất có sẵn là cửa sổ có tùy chọn quay lại phiên 1.

Làm cách nào để có được cmd.exe để khởi chạy trong phiên 0?


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 hộp thông báo, không khởi động Ứng dụng GUI mới. cmd.exe có GUI
Peter Hahndorf

6
@PeterHahndorf Tôi hiểu rằng thật thú vị khi làm chệch hướng trả lời các câu hỏ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 ta thực sự cần làm hay không vì đây là một ý tưởng tồi" và đó là một cách tương đối tốt để từ bỏ các nhà phát triển đồng nghiệp. Nhưng vì đây là một kịch bản gỡ lỗi và có nghĩa là một sửa chữa nhanh chóng (và thay thế cho việc sử dụng một số ứng dụng của bên thứ 3 như Luôn cập nhật), tôi thực sự không thấy cách hỏi "tại sao" là một câu trả lời hữu ích. Dẫu sao cũng xin cảm ơ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 nỗi đau trong tương lai. Tôi không thể đếm được bao nhiêu lần tôi chỉ nghe "sửa nhanh" để vẫn thấy "sửa nhanh" trong sản xuất ba năm sau đó. . . cần một "sửa chữa nhanh" khác. Tôi đang giả sử bạn đang gõ để chạy một tập lệnh bó nào đó?
Surfasb

1
@surfasb Câu hỏi bạn đề xuất về cơ bản là câu hỏi tôi đã viết: "Tôi đang cố gắng 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à không có cơ hội điều này sẽ được đưa vào sản xuất, hoặc để nó liên quan đến nỗi đau trong tương lai. Cách tôi thực hiện để 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 đang làm để gỡ lỗi rất 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âu trả lời:


19

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

psexec.exe -s 0 cmd.exe

Bây giờ bạn có một giao diệ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 các PsTools khác, hãy nhớ sử dụng khóa chuyển / 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ẽ bị treo vì không có UI trong phiên 0 để đóng hộp thông báo.

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

qprocess /ID:0

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


Tuyệt vời cảm ơn vì đã cố gắng trả lời câu hỏi của tôi. Điều này chắc chắn sẽ hoạt động, ý định cụ thể của tôi (như đã nêu trong các bình luận), tuy nhiên là để tránh sử dụng các ứng dụng của bên thứ 3. Có một cách hay để làm điều này mà không bắt buộc phải sử dụng các công cụ SysIternals (hoặc thực sự là bất cứ thứ gì không có trong kho trên Windows)? Cảm ơn một lần nữa.
omghai2u

2
Tôi không xem xét các công cụ Sysiternal 'bên thứ 3' mà họ đến từ Microsoft và bạn không phải cài đặt chúng.
Peter Hahndorf

Xin lỗi, tôi đã xem xét mọi thứ không được cài đặt theo mặc định "bên thứ 3".
omghai2u

Peter. Tuyệt vời, cảm ơn bạn. Hoạt động hoàn hảo để bắt đầu một quy 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

5
Dòng lệnh đầu tiên sai: -schạy với tư cách SYSTEMngười dùng và không tranh luận. Có lẽ bạn có nghĩa -i 0trong ví dụ đầu tiên và -s -i 0trong ví dụ thứ hai?
jwg

1

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

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 Srvanyvà nằm trong Windows 2003 Resource Kit Tools.

Tải xuống Windows Server 2003 Resource Kit Tools


0

Một ngày nọ, tôi phát hiện ra giải pháp một cách tình cờ, 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 bó với các mục sau (gọi nó là some.bat)

start cmd

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

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

(Lưu ý khoảng trắng sau mỗi = và tôi khuyên bạn nên sử dụng đường dẫn đầy đủ cho some.bat)

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

sc start ui0detect
sc start access0

(Không cần phải thực hiện tự động ui0detect với sc config UI0Detect start = auto)

Và nếu mọi việc suôn sẻ, bạn sẽ nhận được hộp nhấp nháy của những tin nhắn sắp xảy ra! Đi tới Xem Tin nhắn và bạn sẽ có cho mình một Lệnh Quản trị viên (nt thẩm quyền \ system) Nhắc nhở sẽ không tự động bị hủy bởi một dịch vụ bắt đầu không thành công (do đó cần một tệp bó với lệnh start)

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

Tôi tin rằng điều này chỉ cung cấp cho bạn quyền truy cập vào phiên tương tác 0, chỉ tồn tại cho người dùng nt thẩm quyền \ hệ thống


-2

Bạn có thể sử dụng phím tắt start (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à voila. cmd


3
Chào mừng bạn đến với SuperUser. Bài viết của bạn không trả lời câu hỏi OP. Bắt đầu CMDbình thường không đặt một trong Session 0.
Tôi nói Phục hồi lại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.