我目前的情况是我需要在IIS托管ASP.net/C# API的远程服务器上执行exe(创建本地.txt文件)。我创建了一个本地用户(比如userA)作为管理员来运行远程服务器中的Web服务,但是没有创建.txt文件。我已经检查并向userA授予必要的文件夹权限,并将用户添加到各个组中。有趣的是,如果我以远程系统中的userA身份登录,则exe会按预期执行。如果我退出然后它失败了。服务器是带有IIS 7的Win服务器2008.任何帮助将不胜感激。
更新:我已经解决了这个问题,并在此处发布了相关问题的答案和一些链接。简而言之,我需要在IIS应用程序池中设置“加载用户配置文件”。
感谢大家的贡献
答案 0 :(得分:12)
更新:几周后我设法解决了这个问题。谢谢大家的贡献。显然,IIS默认情况下不会加载Windows用户配置文件。因此,当作为未登录的其他用户运行时,他们的Windows配置文件必须由IIS加载。在应用程序池的高级设置菜单中,有一个选项“加载窗口配置文件”我只是将其更改为true。在IIS的早期版本中,默认设置为“true”。
关于SO的相关问题与相同的解决方案:
1)Security exceptions in ASP.NET and Load User Profile option in IIS 7.5
2)Running a asp.net web application project on IIS7 throws exception
3)System.Web.AspNetHostingPermission Exception on New Deployment
答案 1 :(得分:6)
您可以使用Process.Start
Process process = new Process();
process.StartInfo.FileName = "CVS.exe";
process.StartInfo.Arguments = "if any";
process.Start();
还有一篇关于在asp.net中作为另一个用户运行进程的帖子:
http://weblogs.asp.net/hernandl/archive/2005/12/02/startprocessasuser.aspx
简而言之,它表示您必须使用以下代码重定向流程:
ProcessStartInfo info = new ProcessStartInfo("cmd.exe");
info.UseShellExecute = false;
info.RedirectStandardInput = true;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
info.UserName = dialog.User; // see the link mentioned at the top
info.Password = dialog.Password;
using (Process install = Process.Start(info))
{
string output = install.StandardOutput.ReadToEnd();
install.WaitForExit();
// Do something with you output data
Console.WriteLine(output);
}