2010-04-29 60 views
1

我想給一個文件(已經存在於客戶端計算機上的.exe)權限始終以管理權限執行。在C#中設置文件的UAC設置

請注意,我想賦予權限的文件已經在目標機器上。我想通過用c#編寫的另一個程序更改該文件的權限,並且擁有管理權限來執行所有操作。

請讓我知道如何做到這一點 我使用這個代碼

 System.Security.AccessControl.FileSecurity fs = File.GetAccessControl(@"c:\inam.exe"); 
     FileSystemAccessRule fsar = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow); 
     fs.AddAccessRule(fsar); 
     File.SetAccessControl(@"c:\inam.exe", fs); 

這個代碼將正確,但仍當我執行此代碼後,再執行inam.exe的UAC沒有出現,改變它的權限inam.exe不能執行管理操作。

實際上,我已經在10,000多個客戶端上部署了一個應用程序,所以想發佈一個補丁來解決管理權限問題。

+0

http://stackoverflow.com/questions/2313045/how-to-set-run-this-program-as-an-administrator-programatically – dtb 2010-04-29 12:32:32

+0

不重複,但可能包含一個可能的答案(特別是在問題中)。 – 2010-04-29 14:18:48

回答

2

建立一個清單文件(見其他地方的http://www.gregcons.com/KateBlog/AddingAManifestToAVistaApplication.aspx)並將其命名爲Whatever.exe.manifest,並將其放在與exe相同的文件夾中。 nanifest應該將requestedExecutionLevel設置爲requireAdministrator。可以了,好了。

如果您擁有其他exe文件,則可以在構建它時嵌入清單。這在Visual Studio 2008及以後幾乎是微不足道的。查看應用程序選項卡並下拉清單下拉菜單。附近有說明。另外,當您使用VS 2008爲項目添加清單時,您不必鍵入所有XML,只需從爲您生成的註釋中複製適當的請求執行級別即可。

+0

謝謝你。 問題已解決。 – 2010-05-03 05:50:24

3

使用管理權限執行不是文件權限。

這通常是通過將a manifest file(可以是EXE中的Win32資源或外部清單)添加來配置的。該清單文件可以說明應用程序是否需要運行提升。

我不完全確定Windows在哪裏存儲「以管理員身份運行此程序」兼容性設置。

3

使用清單文件是最好的方法,但另一種方法是以編程方式將「以管理員身份運行此程序」標誌(您在EXE屬性的兼容性選項卡中找到的選項)設置爲簡單的註冊表項。您需要在這些鍵之一下創建一個字符串值(REG_SZ)(如果您希望設置分別爲每個用戶或每臺機器):

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \層

HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows NT \ CURRENTVERSION \ AppCompatFlags \層

值的名稱必須是你的可執行文件的完整路徑(如果路徑中包含空格,做不包圍帶引號的路徑),並且該值的數據必須包含字符串RUNASADMIN