进程启动和模拟

我在ASP.NET 2.0中的模拟上下文中启动进程时遇到问题。

我在我的Web服务代码中启动新的Process。 IIS 5.1,.NET 2.0

[WebMethod]
public string HelloWorld()
{
    string path = @"C:KBGetWindowUser.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:访问被拒绝。System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess,Boolean threadOnly)上的 r n r n ObcuscatedMdc.Program.Main(String [] args)中的.GetCurrent() r n 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。

这是完整的解释。


你也可以尝试包装你的代码

using (Impersonator person = new Impersonator("domainName", "userName",
"password")
{
    // do something requiring special permissions
}

如http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic62740.aspx中所述


你究竟想要做什么? 我无法完全了解您的代码在创建不同的可执行文件时的作用。 它看起来很奇怪。 说明你首先想要解决的业务问题可能会更有帮助。

链接地址: http://www.djcxy.com/p/42129.html

上一篇: Process start and Impersonation

下一篇: Are there any good movie/film APIs out there?