透過模擬可以實現以管理員權限啟動進程。模擬允許進程以具有提升權限的不同使用者身分運行。
您提供的程式碼利用 ImpersonationHelper
類別來模擬具有所需憑證的使用者。此類建立存取權杖並模擬指定的用戶,從而向進程授予以管理員身份運行的必要權限。
<code class="language-csharp">public ImpersonationHelper(string domain, string user, string password) { // 调用 LogonUser 获取访问令牌的句柄。 bool returnValue = LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref m_tokenHandle); if (false == returnValue) { int ret = Marshal.GetLastWin32Error(); throw new System.ComponentModel.Win32Exception(ret); } // 模拟 m_impersonatedUser = new WindowsIdentity(m_tokenHandle).Impersonate(); }</code>
在 using
區塊內,活化模擬。隨後,Process
類別用於啟動具有指定檔案名稱作為參數的新進程。
<code class="language-csharp">using (new ImpersonationHelper("xxx.blabla.com", "xxxx", "xxxx")) { if (!string.IsNullOrEmpty(txtFilename.Text)) Process.Start(txtFilename.Text); }</code>
或者,您可以透過手動設定 StartInfo
屬性以不同的使用者身分啟動進程,如下所示:
<code class="language-csharp">System.Diagnostics.Process proc = new System.Diagnostics.Process(); System.Security.SecureString ssPwd = new System.Security.SecureString(); proc.StartInfo.UseShellExecute = false; proc.StartInfo.FileName = "filename"; proc.StartInfo.Arguments = "args..."; proc.StartInfo.Domain = "domainname"; proc.StartInfo.UserName = "username"; string password = "用户输入的密码"; for (int x = 0; x < password.Length; x++) { ssPwd.AppendChar(password[x]); } password = ""; proc.StartInfo.Password = ssPwd; proc.Start();</code>
透過為密碼提供 SecureString
,您可以確保安全地處理密碼,並且不會將其儲存在明文記憶體中。
以上是如何使用模擬以不同使用者身分執行 .NET 進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!