C# winform 編譯成功後為程式新增清單檔案,新增Icon以及強簽名
為了使程式不出警告,強簽名這裡是在最後完成的。
簡單說一下過程:
1.新建一個文字檔案,輸入以下程式碼:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
上面的資原始檔裡有一個配置選項叫requestedExecutionLevel, 這個項用於配置當前應用請求的執行許可權級別。這個項有3個值可供選擇,如下所示:
asInvoker : 如果選這個,應用程式就是以當前的許可權執行。
highestAvailable: 這個是以當前使用者可以獲得的最高許可權執行。
requireAdministrator: 這個是僅以系統管理員許可權執行。
儲存後改名為AppName.exe.manifest
利用mt.exe來注入該清單檔案。
命令列:mt -mainfest AppName.exe.manifest -outputresource:AppName.exe ;#1
2.新增Icon
命令列:ReplaceVistaIcon.exe AppName.exe Icon.ico
ReplaceVistaIcon.exe是一個小工具。
3.強簽名
命令列:sn -R AppName.exe Private.snk
將以上三段命令列寫入編譯後事件中,即可。
另:
要注意,程式強簽名要設定為延遲簽名。
即:程式簽名處的AssemblyDelaySign屬性設定為true([assembly:AssemblyDelaySign(true)])
以上命令列都是VS自帶的command所執行的所以使用時,App可執行檔案(exe),SN.EXE,MT.EXE,清單檔案,ico圖示等的目錄需要根據實際情況設定。
判斷程式是否以管理員身份執行
需要新增名稱空間:
using System.Security.Principal;
/// <summary> /// 確定當前主體是否屬於具有指定 Administrator 的 Windows 使用者組 /// </summary> /// <returns>如果當前主體是指定的 Administrator 使用者組的成員,則為 true;否則為 false。</returns> public static bool IsAdministrator() { bool result; try { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); result = principal.IsInRole(WindowsBuiltInRole.Administrator); //http://www.cnblogs.com/Interkey/p/RunAsAdmin.html //AppDomain domain = Thread.GetDomain(); //domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); //WindowsPrincipal windowsPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal; //result = windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator); } catch { result = false; } return result; }