使用提升的权限和备用凭据运行 .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中文网其他相关文章!