昇格された特権と代替資格情報を使用した .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 中国語 Web サイトの他の関連記事を参照してください。