別のユーザーとして .NET プロセスを開始します
.NET の Process クラスを使用する場合、別のユーザーとしてプロセスを実行する必要がある場合があります。ただし、デフォルトのプロセス作成には必要な権限が不足している可能性があります。
解決策: シミュレーションを使用する
この問題を解決するには、シミュレーションを使用できます。サンプル コードには、要求元ユーザーのアクセス トークンを取得するための ImpersonationHelper クラスの使用が組み込まれています。これにより、シミュレーション中に、さまざまなユーザー コンテキストでプロセスを実行できます。提供された例では、ImpersonationHelper コンストラクターはドメイン、ユーザー、およびパスワードのパラメーターを受け入れて、偽装ユーザーを確立します。
代替: 明示的なプロセス構成
もう 1 つの方法は、Process オブジェクトの起動情報を明示的に構成することです。これには、ドメイン、ユーザー名、およびパスワードのプロパティの設定が含まれます。さらに、UseShellExecute を false に設定し、FileName プロパティと Arguments プロパティを明示的に指定する必要があります。この方法では、ユーザーはパスワードを平文で入力する必要がありますが、これはすべてのシナリオに適しているわけではありません。
サンプルコード (修正されたより完全なバージョン):
<code class="language-csharp">System.Diagnostics.Process proc = new System.Diagnostics.Process(); System.Security.SecureString ssPwd = new System.Security.SecureString(); foreach (char c in "user entered password") // 将密码安全地添加到SecureString { ssPwd.AppendChar(c); } ssPwd.MakeReadOnly(); proc.StartInfo.UseShellExecute = false; proc.StartInfo.FileName = "filename"; proc.StartInfo.Arguments = "args..."; proc.StartInfo.Domain = "domainname"; proc.StartInfo.UserName = "username"; proc.StartInfo.Password = ssPwd; // 使用SecureString存储密码 try { proc.Start(); proc.WaitForExit(); } catch (Exception ex) { // 处理异常 Console.WriteLine("Error starting process: " + ex.Message); } finally { ssPwd.Dispose(); // 释放SecureString资源 }</code>
重要な注意: 上記のコード スニペットでは、コード内にパスワードを直接ハードコードするのは安全ではありません。実際のアプリケーションでは、安全なストレージからの読み取りや、より高度な認証メカニズムの使用など、より安全な方法を使用してユーザー パスワードを取得および管理する必要があります。 さらに、エラー処理も重要であり、プログラムの安定性を確保するには、より完全な例外処理メカニズムを追加する必要があります。
以上が別のユーザーとして .NET プロセスを開始するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。