c# - 从 ASP.NET 网站访问被拒绝启动过程
问题描述
我有一个 ASP.NET MVC4 网站,我试图在服务器上执行一个进程。代码如下:
ProcessStartInfo startInfo = new ProcessStartInfo()
{
FileName = ExeLocation,
Arguments = string.Format("\"{0}\"{1}", ScriptLocation, Arguments),
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
WorkingDirectory = AppDir,
CreateNoWindow = true,
UserName = ExeUsername,
Password = ExePassword,
Domain = ExeDomain
};
using (Process process = Process.Start(startInfo))
{
using (StreamReader reader = process.StandardOutput)
{
output = reader.ReadToEnd();
}
using (StreamReader reader = process.StandardError)
{
error = reader.ReadToEnd();
}
process.WaitForExit();
if (process.ExitCode != 0)
{
throw new Exception(string.IsNullOrEmpty(output) ? error : output);
}
}
这在 Visual Studio 中的本地计算机上运行良好,但是当我部署到我的服务器 (W2K12) 时,我收到以下错误:
Access is denied
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
我在服务器上的管理员和IIS_IUSRS组 ExeUsername
中都引用了该帐户。
应用程序池作为不同的帐户运行(因此需要分配一个特定的帐户来运行该进程),该帐户也是服务器上管理员和 IIS_IUSRS 的成员。
当我登录服务器并以 身份运行命令提示符ExeUsername
时,我能够执行该过程,因此问题必须与从 IIS 执行有关。
还有什么可能阻止此访问?
解决方案
- 右键单击应用程序池
- 点击高级设置
- 身份
- 自定义帐户
- 设置用户名和密码
如果您有域,请小心使用域\用户名作为用户名
,并访问部署文件夹。
推荐阅读
- javascript - 将 Redux 映射状态反应到道具不起作用
- jersey - CDI 拦截器和 Jersey JAX/RS
- ruby-on-rails - 如何使用动态参数限制范围路由,使其仅具有特定的参数组合
- node.js - 如何在 Laravel5.2 资产文件中使用节点模块
- javascript - 将选定的日期范围选择器值推送到 URL
- c++ - ncurses 在 cchar_t 上找不到任何文档
- r - 使用[[时的R错误子集data.frame
- reactjs - 如何使用 Mocha 对通过 promise-retry 调用服务进行单元测试?
- android - Firebase 分析:仅发送一次事件
- reactjs - 在 vscode 中调试 React JSX