2011-10-11 129 views
13

我正在研究將「嵌入」到Windows 7系統的項目,這將通過禁用任務管理器並將Windows shell更改爲應用程序以及其他的東西。以編程方式更改Windows Shell

我在這裏要做的是以編程方式更改應用程序和explorer.exe之間的Windows shell,我想知道是否有任何方式在C#中執行此操作。

目前我有幾行代碼試圖更改Windows Shell中的註冊表項,但沒有出現刷新註冊表編輯器後發生的,代碼如下:

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(); 

我已經嘗試重新啓動Windows,看看是否允許shell更改完成,但無濟於事。

我非常感謝,如果有人能告訴我是否可以通過編程的方式做到這一點,以及我在哪裏出錯。

此外,我很高興知道是否有一種方法來編寫程序,以便它始終以管理員權限運行,以便註冊表編輯工作。

非常感謝,

理查德

+1

誰在正確的思維將安裝禁用任務管理器的應用程序? –

+1

@Rhhound這個問題不是關於禁用任務管理器的 - 應用程序不會銷售給公衆,因爲普通公衆將無法使用它,這是針對敏感數據和應用程序本身的專業應用程序需要防止被盜/篡改 –

+0

@RichardBenn:我認爲你應該詢問一下。通常爲了防止敏感數據/盜竊,我們使用密碼和加密。你爲什麼忽略這些標準路徑?沒有安全專家會建議您通過更改Windows Shell來提高安全性。 – tenfour

回答

12

在網絡上其他地方的一番搜索後,我終於得到了命令行管理程序更改爲正在建設中的應用程序的可執行文件。

「嵌入」過程是一個三步過程,在我正在使用的軟件的情況下,我們先禁用任務管理器,然後在本地計算機註冊表中設置shell可執行文件,然後重複該過程在當前用戶註冊表中。

下面是實現這一點的代碼:

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); 
    } 
} 

在此示例中,變量「殼」是包含可執行文件的路徑作爲新的Windows外殼使用的字符串。

除此之外,還有一種「解嵌」軟件的方法,該方法簡單地從當前用戶註冊表中刪除「DisableTaskMgr」和「Shell」值,它還重置本地機器中的「Shell」值註冊表到「explorer.exe」。

我希望這可以幫助那些無法以編程方式更改Windows Shell的人。

問候,

理查德

+2

對不起,我在這裏發佈問題和答案還很新。我編輯答案只是答案 –