2012-04-06 139 views
3

我正在研究如何在Windows上下文菜單中將快捷方式添加到我的應用程序中。我碰到this文章,我試了一下。這是它用來在註冊表中創建密鑰的代碼。創建註冊表項時發生UnauthorizedAccessException

private void btnAddMenu_Click(object sender, System.EventArgs e) 
{ 
    RegistryKey regmenu = null; 
    RegistryKey regcmd = null; 
    try 
    { 
     regmenu = Registry.ClassesRoot.CreateSubKey(MenuName); 
     if(regmenu != null) 
      regmenu.SetValue("",this.txtName.Text); 
     regcmd = Registry.ClassesRoot.CreateSubKey(Command); 
     if(regcmd != null) 
       regcmd.SetValue("",this.txtPath.Text); 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show(this,ex.ToString()); 
    } 
    finally  
    { 
     if(regmenu != null) 
      regmenu.Close(); 
     if(regcmd != null) 
      regcmd.Close(); 
    }   
} 

問題是如果我通過我的管理員帳戶運行它,它工作正常。但是,當我通過不具有管理員權限的其他帳戶執行此操作時,它會引發此異常。

system.unauthorizedaccessexception access to the registry key is denied 

現在,如果我要使用此代碼在我自己的應用程序來創建上下文菜單的快捷方式,我不能肯定每個用戶都可以運行它爲管理員,對不對?

有沒有什麼辦法在C#中去升級創建註冊表鍵時的用戶權限?

如果您知道任何其他方式將項目添加到Windows上下文菜單,我也會對它們感興趣。

謝謝。

+0

當用戶以管理員身份安裝應用程序時,您必須創建該密鑰。 – ZippyV 2012-04-06 10:18:10

+0

這將需要用戶交互,對吧?有沒有辦法從代碼中做到這一點? – Isuru 2012-04-06 10:21:37

+0

這是安裝程序的工作。它將擁有必要的權利。不需要代碼。用VS安裝項目很簡單。 – 2012-04-06 10:44:56

回答

2

您不能升級權限(至少我想知道它,但目前看起來不可能),但是您需要運行/啓動您的應用程序(嵌入到清單中)提升。
請看看這些條目...
How do I force my .NET application to run as administrator?
Elevating process privilege programatically?
我建議有什麼意見說,運行從設置。或者讓您的應用程序從一開始就以管理員身份運行,或者可能需要時從應用程序中跳過啓動一個提升進程 - 例如運行您的另一個有正確清單的exe文件。

+0

謝謝您的信息。這將是有用的。 – Isuru 2012-04-06 12:20:53

2

您可以像安裝程序那樣升級權限。這將需要用戶交互,因爲這是操作系統設計的方式(並且正確) - 你無法繞過它。