从ASP运行命令.NET应用程序池标识
本文关键字:应用程序 程序池 标识 应用 NET ASP 运行 命令 | 更新日期: 2023-09-27 18:02:05
我正在从我的ASP运行一个可执行进程。. NET应用程序,当用户单击按钮时。这个过程创建几个文件,并将它们提供给最终用户。我无法真正看到进程在做什么或没有做什么,但是直到我将admin用户指定为服务器上的应用程序池标识,它才开始工作。我正在使用IIS7。
using (var proc = new Process())
{
proc.StartInfo.FileName = Server.MapPath("~/Testing/Demo/MyExe.exe");
proc.StartInfo.Arguments = String.Format("'"{0}'"", commandFilePath);
proc.StartInfo.UseShellExecute = true;
proc.Start();
proc.WaitForExit();
}
我认为这通常是一件不好的事情。你能告诉我需要做些什么才能为正常的ApplicationPoolIdentity
帐户启用这个功能吗?
谢谢!
首先,为什么需要Shell来执行它?是不是一个控制台应用程序-你打开任何窗口吗?
第二,你需要重定向输入和输出。
最后,您需要做的是在脚本运行的目录下,为运行池的用户设置权限。并从您的池中删除Admin。
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardInput = true;
proc.Start();
proc.StandardInput.Flush();
proc.StandardInput.Close();
proc.WaitForExit();
proc.Close();
因此,例如,如果您将池添加到UserA下运行,那么请转到您的程序运行的目录,并为UserA添加能够在该目录下执行程序的权限。如果您的程序还使用其他目录进行读写,也要为这些目录添加UserA权限。
我不能真正看到进程在做什么或没有做什么
如果在服务器上使用进程资源管理器,您可以查看它是否运行,是否关闭,是否停止但停留在那里。
可能是文件/执行权限问题。尝试将ApplicationPoolIdentity的execute
权限授予~/Testing/Dema/MyExe.exe
,将read
权限授予commandFilePath
。您提到您的进程创建文件。您需要将modify
或full control
权限授予ApplicationPoolIdentity在创建文件的文件夹上的权限。以下是权限的矩阵列表。
关于授予权限的信息,请参见assign permissions to ApplicationPoolIdentity account。
安全事件日志应该捕获权限拒绝错误。检查那里,看看您是否有访问权限问题。系统和应用程序日志也可能包含有关问题的信息。
Process Explorer还可以显示文件访问请求。这是一篇关于使用Process Explorer进行故障排除的技术文章。
无论何时从ASP. net运行任何进程。. NET页面,它在工作进程的安全上下文中运行,这是你的应用程序池帐户的特权。它不像你通常运行MyExe.exe,在这种情况下,它将使用登录帐户运行。正因为如此,你的代码工作时,你给管理员帐户应用程序池。
有很多方法可以解决这个问题。
最简单的方法之一是将你的应用程序池身份更改为网络服务,并将网络服务添加到myexe将访问文件表单的文件夹的权限中。
希望能有所帮助。
谢谢大家的帮助。我所需要做的就是设置StartInfo。工作目录到我能写的地方
using (var proc = new Process())
{
proc.StartInfo.FileName = Server.MapPath("~/Testing/Demo/MyEXE.exe");
proc.StartInfo.Arguments = String.Format("'"{0}'"", commandFile);
proc.StartInfo.WorkingDirectory = savePath;
proc.Start();
proc.WaitForExit();
}
这将导致临时文件被写入非系统文件夹,因此不需要任何应用程序池的提升权限。