2011-10-11 3 views
13

Tôi đang làm việc trên một dự án sẽ được "nhúng" vào hệ thống Windows 7, điều này sẽ đạt được bằng cách tắt trình quản lý tác vụ và thay đổi vỏ cửa sổ cho ứng dụng, cũng như nhiều thứ.Lập trình thay đổi Windows Shell

Điều tôi muốn làm ở đây là thay đổi chương trình vỏ Windows giữa ứng dụng và explorer.exe, tôi muốn biết nếu có cách nào để thực hiện việc này trong C#.

Hiện nay tôi có một vài dòng mã mà cố gắng để thay đổi các mục nhập registry cho Windows Shell, nhưng không xuất hiện để xảy ra sau khi làm mới Registry Editor, mã trông như thế này:

regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Microsoft", true).OpenSubKey("Windows NT", true).OpenSubKey("CurrentVersion", true).OpenSubKey("Winlogon", true); 
    regKey.DeleteValue("Shell"); 
    regKey.SetValue("Shell", shell); 
    regKey.Close(); 

tôi đã thử khởi động lại các cửa sổ để xem liệu điều đó có cho phép thay đổi shell hoàn thành, nhưng không có kết quả.

Tôi rất muốn đánh giá cao nếu ai đó có thể cho tôi biết nếu nó thậm chí có thể làm điều đó theo lập trình và tôi sẽ sai với nó.

Ngoài ra, tôi sẽ rất biết ơn nếu có cách để mã chương trình để nó luôn chạy với đặc quyền quản trị để chỉnh sửa registry sẽ hoạt động.

Nhiều Cảm ơn,

Richard

+1

Ai trong tâm đúng sẽ cài đặt một ứng dụng vô hiệu hóa các công việc quản lý? –

+1

@Ramhound câu hỏi này không phải là về vô hiệu hóa công việc quản lý - ứng dụng sẽ không được bán cho công chúng, bởi vì công chúng sẽ không có sử dụng cho nó, điều này là dành cho một ứng dụng chuyên gia nơi dữ liệu nhạy cảm, và bản thân ứng dụng cần phải được bảo vệ khỏi trộm cắp/giả mạo –

+0

@RichardBenn: Tôi nghĩ bạn nên hỏi về điều đó sau đó. Thông thường để bảo vệ chống lại dữ liệu nhạy cảm/trộm cắp, chúng tôi sử dụng mật khẩu và mã hóa. Tại sao bạn bỏ qua các đường dẫn tiêu chuẩn này? Không có chuyên gia bảo mật nào đề nghị bạn tăng tính bảo mật bằng cách thay đổi vỏ cửa sổ. – tenfour

Trả lời

12

Sau nhiều tìm kiếm các địa điểm khác trên mạng, tôi đã cuối cùng đã Shell để thay đổi các tập tin thực thi của ứng dụng đó đang được xây dựng.

Quy trình "Nhúng" là quy trình ba bước, trong trường hợp phần mềm tôi đang làm việc, chúng tôi bắt đầu bằng cách tắt Trình quản lý tác vụ, Sau đó, chúng tôi đặt trình bao thực thi trong Local Machine registry và sau đó lặp lại quy trình trong sổ đăng ký Người dùng hiện tại.

Dưới đây là đoạn code mà đạt được điều này:

public void embedSoftware() 
{ 
    try 
    { 
     // Disable Task Manager 
     regKey = Registry.CurrentUser.OpenSubKey(subKey, true).CreateSubKey("System"); 
     regKey.SetValue("DisableTaskMgr", 1); 
     regKey.Close(); 
     // Change the Local Machine shell executable 
     regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
     regKey.SetValue("Shell", shell, RegistryValueKind.String); 
     regKey.Close(); 
     // Create the Shell executable Registry entry for Current User 
     regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
     regKey.SetValue("Shell", shell); 
     regKey.Close(); 
     MessageBox.Show("Embedding Complete"); 

    } 
    catch (Exception e) 
    { 
     MessageBox.Show(e.Message); 
    } 
} 

Trong ví dụ này biến "vỏ" là một chuỗi chứa đường dẫn của thực thi để sử dụng như Windows Shell mới.

Hơn nữa, có phương pháp "bỏ nhúng" phần mềm, phương pháp này đơn giản xóa các giá trị "DisableTaskMgr" và "Shell" khỏi sổ đăng ký người dùng hiện tại, nó cũng đặt lại giá trị "Shell" trong Local Machine đăng ký để "explorer.exe".

Tôi hy vọng điều này sẽ giúp những người khác ở đó đang gặp sự cố khi thay đổi Windows Shell theo lập trình.

Kính trọng,

Richard

+2

Xin lỗi, tôi vẫn còn khá mới khi đăng câu hỏi và câu trả lời ở đây. Tôi đã chỉnh sửa câu trả lời chỉ là câu trả lời –