Làm cách nào để khởi chạy Windows Explorer shell sau khi bắt đầu với một cái khác?


6

Sau đây là một bản hack, nhưng với những gì tôi cần thì nó vẫn ổn.

Tôi đã tạo một chương trình C # hiển thị một số văn bản EULA và có nút Đồng ý và Không đồng ý.

Tôi đặt HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell để khởi động chương trình đó.

Khi máy tính khởi động, lời nhắc đăng nhập bình thường hiển thị.

Sau khi đăng nhập, chương trình EULA tùy chỉnh sẽ khởi chạy.

Không có shell explorer, không có menu start, không có nền, v.v. (đó là những gì tôi muốn).

Nút không đồng ý tắt máy tính và hoạt động tốt.

Tôi muốn nút Đồng ý tải vỏ trình duyệt windows explorer bình thường (menu bắt đầu, nền, v.v.).

Tôi đã sử dụng lệnh C # sau đây: Process.Start("explorer.exe");

Tuy nhiên, điều này khởi chạy một cửa sổ thám hiểm, không phải vỏ. Tôi muốn vỏ để khởi chạy.

Tôi đang thiếu gì?


2
là explorer.exe đã chạy như là quá trình máy tính để bàn khi bạn gọi nó? nếu không có phiên bản thám hiểm nào chạy để đăng nhập, nó sẽ sinh ra quá trình máy tính để bàn, nhưng nếu nó đã chạy, nó sẽ sinh ra một cửa sổ thám hiểm. Ứng dụng của bạn đang chạy trong bối cảnh nào? Tôi cho rằng đó là trước khi đăng nhập? nếu không, quá trình netlogin có thể đã sinh ra quá trình máy tính để bàn của bạn.
Frank Thomas

Không, explorer.exe không chạy khi trình bao tùy chỉnh được khởi chạy. Nó không chạy cho đến khi tôi nhấp vào nút đồng ý. Tôi giả sử tôi cần bắt đầu một cái gì đó ngoài explorer.exe ... Tôi không biết ...
Keltari

Bạn đang làm điều này cho các kết nối RDP hay bạn cũng cần hiển thị EULA cho người dùng đã đăng nhập cục bộ? Nếu RDP chỉ thử sử dụng chính sách nhóm này !
Scott Chamberlain

Nhìn vào bài viết này, có vẻ như phương pháp này sẽ không hiệu quả ... social.technet.microsoft.com/Forums/windows/en-US/ cường
Keltari

1
Tôi đánh giá cao sự cần thiết phải thay thế toàn bộ Shell chỉ để hiển thị EULA. Giải pháp toàn cầu cho một vấn đề địa phương.
surfasb

Câu trả lời:


3

Trong Windows 10, để khởi động lại Explorer Desktop, bạn phải đặt khóa đăng ký Shell thành "explorer.exe" và hủy quá trình "sihost.exe" hoặc khởi động lại quy trình "sihost.exe" mới.


Đó là nó, khởi động lại sihost.exe đã làm điều đó cho tôi. Cảm ơn rất nhiều!
cheeesus

2

Tôi làm chính xác như bạn đang làm, đây là cách tôi khởi chạy Explorer

Process explorer = new Process();
explorer.StartInfo.FileName =
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "explorer.exe");
if (explorer.Start() == false)
{
    MessageBox.Show("Explorer failed to start.");
}
else
{

    //(Snip) some other code that is not relevant.

    explorer.WaitForExit();
}

//(Snip) some cleanup code I run after the user logs off.

và nó hoạt động tốt.

Bây giờ tôi đang làm điều này trong một phiên RDP bằng cách sử dụng chính sách nhóm này ( Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection ) không thông qua tệp đăng ký bạn đang sử dụng, vì vậy có lẽ đó là lý do tại sao nó hoạt động cho tôi chứ không phải cho bạn.

Một điều khác tôi có thể làm khác là tôi cũng gọi explorer.WaitForExit(); trong mã của tôi và đợi trình thám hiểm tự đóng trước khi đóng ứng dụng của tôi.

Hãy thử sử dụng cách tôi bắt đầu thám hiểm và xem nếu nó hoạt động cho bạn.


Tôi đã thử mã của bạn, nhưng nó chỉ khởi chạy một cửa sổ trình duyệt tệp chứ không phải trình bao
Keltari

@Keltari bạn có cần hỗ trợ đăng nhập cục bộ hay sẽ chỉ hiển thị EULA cho người dùng RDP hoạt động cho những gì bạn muốn làm?
Scott Chamberlain

1

Explorer phải xem một số điều kiện đã hoàn thành để khởi chạy dưới dạng shell:

  1. Explorer không được chạy (ví dụ bao gồm Bảng điều khiển)
  2. Explorer phải xem nó là shell thực tế - do đó bạn cần thay thế giá trị đó trước khi khởi chạy explorer.exe (có thể thay đổi lại vài giây sau)
  3. Đôi khi có vẻ như (trên các phiên bản Windows mới hơn), nó phụ thuộc vào quá trình khởi chạy explorer.exe - nếu nó được "biết" với explorer.exe - mặc dù vậy tôi không có thêm thông tin chi tiết nào cho phần này (và bạn không thể không may thay đổi nó

Đánh giá từ câu hỏi của bạn, bạn ít nhất là thiếu phần 2.


-1

Sửa đổi sổ đăng ký, đặt explorer.exe vào shell, bắt đầu quá trình explorer.exe mới (bạn không có bất kỳ tiến trình explorer.exe nào đang chạy) và trả shell về shell của bạn (giá trị trống nếu cần).


1
Vui lòng viết lại bằng tiếng Anh rõ ràng (nghĩa là, nhiều câu hoàn chỉnh với ngữ pháp chính xác). Mở rộng tốc ký như ‘‘ sửa đổi registry Đăng nhập thành các hướng dẫn có thể sử dụng. Không trả lời trong các bình luận; chỉnh sửa câu trả lời của bạn làm cho nó rõ ràng và đầy đủ hơn.
G-Man
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.