我在ASP.NET 2.0中模拟上下文中启动进程时遇到问题.
我在我的Web服务代码中启动了新的Process.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();
}
Run Code Online (Sandbox Code Playgroud)
"C:\ KB\GetWindowUser.exe"是包含以下代码的控制台应用程序:
static void Main(string[] args)
{
Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name);
}
Run Code Online (Sandbox Code Playgroud)
当我在没有模仿的情况下调用Web服务时,一切正常.
当我打开模拟时,跟随错误写入Web服务代码中的"errors"变量:
未处理的异常:System.Security.SecurityException:访问被拒绝.\ r \n\r \n在System.Security.Principal.WindowsIdentity的System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess,Boolean threadOnly)\ r \n中.GetCurrent()\ r \n在ObfuscatedMdc.Program.Main(String [] args)\ r \n失败的程序集区域是:\ r \nMyComputer
模拟用户是本地管理员,可以访问C:\ KB\GetWindowUser.exe可执行文件.
当我在ProcesStartInfo属性Domain,User和Password中明确指定窗口用户时,我收到以下消息:http: //img201.imageshack.us/img201/5870/pstartah8.jpg
是否可以从asp.net(IIS 5.1)开始使用不同于ASPNET的凭据进程?
您必须将特权代码放入 GAC(或以完全信任的方式运行)。
GAC 中的代码必须断言 XXXPermission,其中 XXX 是您请求的任何权限,无论是模拟、访问硬盘驱动器还是您拥有的权限。
您应该在事后立即恢复断言。
您应该确保放入 GAC 中的 DLL 上的 API 不会被滥用。例如,如果您正在编写一个网站,让用户通过命令行应用程序备份服务器,那么您的 API 应该旧地公开类似“BackUp()”的方法,而不是“LaunchAribitraryProcess(string path)”
web.config 文件也必须设置模拟,否则您将遇到 NTFS 权限问题以及 CAS 问题。
这是完整的解释。
| 归档时间: |
|
| 查看次数: |
9540 次 |
| 最近记录: |