使用提升的權限和備用憑證來執行 .NET 程序
本文詳細介紹如何使用不同的使用者帳戶執行具有管理權限的 .NET 應用程式。
挑戰:
嘗試啟動需要管理存取權限的進程通常會導致權限不足的錯誤。
範例程式碼(說明性):
<code>public class ImpersonationHelper : IDisposable { // Impersonation code (omitted for brevity)... } using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx")) { if (!string.IsNullOrEmpty(txtFilename.Text)) Process.Start(txtFilename.Text); }</code>
解決方案:以提升權限直接啟動
不要模擬用戶,而是直接建立一個具有提升權限的新進程:
<code class="language-csharp">System.Diagnostics.Process proc = new System.Diagnostics.Process(); System.Security.SecureString ssPwd = new System.Security.SecureString(); proc.StartInfo.UseShellExecute = true; // Note: Changed to true for elevation proc.StartInfo.FileName = "filename"; proc.StartInfo.Arguments = "args..."; proc.StartInfo.Domain = "domainname"; proc.StartInfo.UserName = "username"; proc.StartInfo.Password = new System.Security.SecureString(); // Important: Handle password securely string password = "user entered password"; foreach (char c in password) { proc.StartInfo.Password.AppendChar(c); } proc.StartInfo.Password.MakeReadOnly(); proc.Start(); proc.StartInfo.Password.Dispose(); //Dispose of the SecureString</code>
此方法使用提供的憑證啟動一個新進程,並授予其必要的管理權限。 請記得使用 SecureString
安全地處理密碼。 UseShellExecute = true
對於特權提升至關重要。 前面使用 false
的範例無法用於此目的。
以上是如何以具有提升權限的不同使用者身分啟動 .NET 進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!