시뮬레이션을 통해 관리자 권한으로 프로세스를 시작할 수 있습니다. 가장을 사용하면 프로세스가 높은 권한을 가진 다른 사용자로 실행될 수 있습니다.
제공한 코드는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!