2012-04-20 163 views
-1

嗯,我注意到在Windows 7上,有時甚至當你是管理員時,你不能做很多事情,可能是某種錯誤,我的應用程序在啓動程序之前檢查用戶是否是管理員,因爲我的程序在受保護的文件夾中創建文件,如根文件夾(C:),並且如果您不是Windows 7的管理員,則只能創建文件夾那裏。當用戶已經是管理員時,通過C++激活管理員[以管理員身份運行]

所以,如果我在我的應用程序中點擊右鍵並選擇「以管理員身份運行」,它就可以正常工作。 有沒有辦法讓我的應用程序自動以管理員身份運行?我希望能夠製作一行代碼,如:ActivateAdministrator();,並且完全可用於代碼,因爲我更改屬性,使用ifstream創建文件。

+0

我認爲問題是:如果有辦法做到這一點,那麼惡意軟件會這樣做,以獲得管理員權限。 – Mysticial 2012-04-21 00:01:46

+4

文件夾限制和UAC彈出窗口是有原因的。如果你找到了一個方法,M $會衝出一個「重要安全更新」,你的代碼將不再工作。 – 2012-04-21 00:04:02

+0

我不認爲他試圖規避UAC,我相信他想通過默認操作系統設置(UAC啓用或禁用)來正常提升其應用程序的權限。 – 2012-04-21 00:08:13

回答

4

你可以添加一個清單給你的可執行文件 - http://msdn.microsoft.com/en-us/library/bb756929.aspx

如果用戶的系統上運行與UAC開啓,而不是管理員,清單包含requestedExecutionLevel level="requireAdministrator"會產生提示輸入管理員您的應用程序可以使用管理權限運行之前的密碼(需要管理員權限意味着不正確的密碼或沒有密碼會阻止它完全運行)

如果他們是UAC打開的管理員,那麼相同的清單會導致是/否提示詢問您的應用程序應該被授予管理權限。

當然,真正的問題是無論你的應用程序在做什麼需要管理權限都需要檢查。

大多數情況下,普通用戶級應用程序不需要權限。這確實是一個應用程序設計問題 - 您的應用程序需要管理員權限來執行哪些操作?是否真的需要?例如如果您要修改文件,那麼爲什麼這些文件位於文件系統的受保護區域而不是用戶的配置文件空間中?

2

儘管這是用C#編寫的,但對我來說可能更容易些,我不知道。我所做的是Detect if running as Administrator with or without elevated privileges?,如果不是在請求管理訪問時重新運行當前進程(如果啓用了UAC,則會彈出當前用戶並詢問程序是否可以使用管理權限運行)。

然後一些簡單的(但C#代碼)的樣子:

// UAC is a class from the previous link on SO 
if (UAC.IsCurrentProcessElevated()) 
{ 
    string currentProcess = Assembly.GetEntryAssembly().Location; 
    string arguments = string.Join(" ", this._Args.ToArray()); 
    ProcessStartInfo startInfo = new ProcessStartInfo(currentProcess, arguments); 
    startInfo.UseShellExecute = true; 
    startInfo.Verb = "runas"; 
    Process.Start(startInfo); 
} 

將未升高的過程將相當,有一個新的開始即要求管理權限。

相關問題