概述:.NET應用程式以管理員身份執行的方法包括修改清單檔案、專案檔案,或在執行時動態請求管理員許可權。清單檔案和專案檔案透過宣告UAC請求,而動態請求管理員許可權則在程式啟動時檢查並重新啟動。選擇適當的方法取決於專案需求和配置。
在.NET應用程式中強制以管理員身份執行,可以透過清單檔案、專案檔案或者在程式執行時動態請求管理員許可權。下面詳細講解這三種方法的基礎功能:
方法一:清單檔案(.exe.manifest)
步驟:
- 建立.NET應用程式: 建立一個.NET應用程式。
- 修改清單檔案: 新增UAC請求到清單檔案。
示例原始碼:
在你的應用程式專案資料夾下建立一個新的清單檔案(例如app.manifest),並將以下內容新增到清單檔案中:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
在專案屬性中的"應用程式"標籤下,選擇清單檔案為剛剛建立的app.manifest。
方法二:專案檔案 (csproj)
步驟:
- 建立.NET應用程式: 建立一個.NET應用程式。
- 在專案檔案中配置清單檔案: 設定 <ApplicationManifest> 元素的 RequestedExecutionLevel 屬性。
示例原始碼:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
</Project>
在這個示例中,<ApplicationManifest> 元素指定了清單檔案的名稱為 app.manifest。
方法三:動態請求管理員許可權
步驟:
- 建立.NET應用程式: 建立一個.NET應用程式。
- 在程式執行時檢查許可權: 使用 WindowsPrincipal 檢查是否以管理員身份執行,如果不是,透過 ProcessStartInfo 重新啟動並請求管理員許可權。
示例原始碼:
using System;
using System.Diagnostics;
using System.Security.Principal;
using System.Windows.Forms;
namespace AdminModeApp
{
static class Program
{
[STAThread]
static void Main()
{
// 檢查是否以管理員身份執行
if (!IsRunAsAdministrator())
{
// 如果沒有以管理員身份執行,則重新啟動應用程式
RunAsAdministrator();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
private static bool IsRunAsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
private static void RunAsAdministrator()
{
// 重新啟動應用程式以管理員身份
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = Application.ExecutablePath,
UseShellExecute = true,
Verb = "runas" // 請求管理員許可權
};
try
{
Process.Start(startInfo);
}
catch (Exception ex)
{
// 處理異常,例如使用者拒絕提升許可權
MessageBox.Show("無法以管理員身份執行應用程式:" + ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Application.Exit();
}
}
}
上述程式碼在應用程式啟動時檢查是否以管理員身份執行,如果不是,則透過 RunAsAdministrator 方法重新啟動應用程式並請求管理員許可權。
以上三種方法均可實現以管理員身份執行應用程式,具體選擇取決於你的需求和專案配置。