2013-07-02 160 views
3

我工作的基於.NET的項目具有某些功能,我們只希望管理員可以使用這些功能。控制訪問這些功能的方法與PrincipalPermissionAttribute裝飾,像這樣:允許本地管理員運行應用程序,而無需「以管理員身份運行」

[PrincipalPermission(SecurityAction.Demand, [email protected]"BUILTIN\Administrators")] 
public static void RunAdminFeature() 
{ 
    // code here 
} 

我們的許多用戶都在他們的系統本地管理員,然而,我們發現,他們仍然要右擊應用程序圖標,然後選擇「以管理員身份運行」選項,以使這些功能可供他們使用。

從問題和答案here,這似乎是Windows 7上的預期行爲。如果是這樣,那麼它看起來像修改應用程序快捷方式here可能是預期的解決方案。如果是這樣的話,那就這樣吧。

我的問題是雙重的。

  1. 我在做正確的事情編程?屬性是否接近正確的屬性?
  2. 是否有程序化的方式來實現對某些功能的限制訪問,這些功能也允許本地管理員運行應用程序而不要求他們顯式「以管理員身份運行」?
+0

這是一個很好的問題,我自己也在各種論壇上詢問過(現在試圖找到這些鏈接)。據我所記得(正如你指出的那樣),要求用戶修改快捷方式絕對是解決這個問題的方法。但是,還有另一種方法取決於您使用的是哪個安裝包?我還沒有看到使用的屬性方法,但有興趣聽到你有任何成功。對於第二點,我會說不,沒有討論。讀過這篇文章後,我還沒有找到合適的方法來做到這一點。在UAC中註冊所有您可以做的...... – MoonKnight

+0

@Killercam,儘管我們不限制訪問權限,但屬性方法似乎可以正常工作。例如,如果本地管理員在沒有「以管理員身份運行」的情況下運行我們的應用程序,他們仍然可以(不幸地)從UI訪問功能,但這些功能在這種情況下無法正常工作。 AFAIK,普通用戶總是會經歷同樣的行爲。一旦本地管理員「以管理員身份運行」,這些功能將按預期工作。就安裝程序而言,我們使用InstallShield,但我認爲我們沒有做任何與此問題有關的特殊內容。 –

+0

修改應用程序快捷方式是正確的答案。 –

回答

1

1屬性的方法是確定。您只需正確處理安全異常(例如,以管理員身份重新啓動應用程序)。

2隱藏在你的應用程序管理界面使普通用戶可以使用,除非你添加一個「上帝模式」按鈕的地方,以使在提升模式下的管理界面。例如Windows任務管理器需要提升才能查看所有用戶的進程。

對於自我擡高的示例代碼,請訪問:How to self-elevate an application to a high privilege level under UAC

相關問題