ASP.NET 2.0 の偽装コンテキストでプロセスを開始する際に問題があります。
Web サービス コードで新しいプロセスを開始しています。IIS 5.1、.NET 2.0
[WebMethod]
public string HelloWorld()
{
string path = @"C:\KB\GetWindowUser.exe";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = Path.GetDirectoryName(path);
startInfo.FileName = path;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
Process docCreateProcess = Process.Start(startInfo);
string errors = docCreateProcess.StandardError.ReadToEnd();
string output = docCreateProcess.StandardOutput.ReadToEnd();
}
「C:\KB\GetWindowUser.exe」は、次のコードを含むコンソール アプリケーションです。
static void Main(string[] args)
{
Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name);
}
偽装せずに Web サービスを呼び出すと、すべて正常に動作します。
偽装をオンにすると、Web サービス コードの "errors" 変数に次のエラーが書き込まれます。
未処理の例外: System.Security.SecurityException: アクセスが拒否されました。 .GetCurrent()\r\n at ObfuscatedMdc.Program.Main(String[] args)\r\n失敗したアセンブリのゾーン:\r\nMyComputer
偽装されたユーザーはローカル管理者であり、C:\KB\GetWindowUser.exe 実行可能ファイルにアクセスできます。
ProcesStartInfoプロパティの Domain、User、Password でウィンドウ ユーザーを明示的に指定すると、次のメッセージが表示されました。
asp.net (IIS 5.1) から ASPNET とは異なる資格情報でプロセスを開始することは可能ですか?