c# - 进程启动和模拟

标签 c# .net iis-5

我在 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:访问被拒绝。\r\n\r\n 在 System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess, Boolean threadOnly)\r\n 在 System.Security。 Principal.WindowsIdentity.GetCurrent()\r\n 在 ObfuscatedMdc.Program.Main(String[] args)\r\n失败的程序集区域是:\r\nMyComputer

模拟用户是本地管理员,可以访问 C:\KB\GetWindowUser.exe 可执行文件。

当我在 ProcesStartInfo 属性域、用户和密码中明确指定窗口用户时,我收到以下消息: 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。

这是 complete explanation .

关于c# - 进程启动和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350278/

相关文章:

mysql - 比较数据表/识别相同的数据表

c# - 如何通过 Entity Framework 搜索对象及其子项?

asp.net - 如何正确设置 IIS5 的 SMTP 服务以从我的开发环境发送电子邮件?

c# - 如何使用 C# 检查注册表值是否存在?

c# - itextsharp pdf页面边框?

c# - 线程同步 : shared resources and actions with different resource number demand

.net - Entity Framework Left Outer Joins and Group into throws : ORA-00907: missing right parenthesis

iis - 启动 Internet 信息服务时,mmc 无法创建错误的管理单元

html - 无法在 IIS5 中启用服务器端包含

c# - 找到两个数字列表的良好匹配