20

我目前的情况是我需要在远程服务器中执行一个 exe(它创建一个本地 .txt 文件),而 IIS 托管一个 ASP.net/C# API。我创建了一个本地用户(比如 userA)作为管理员在远程服务器中运行 Web 服务,但没有创建 .txt 文件。我已经检查并授予 userA 必要的文件夹权限,并将用户添加到各个组中。有趣的是,如果我在远程系统中以 userA 身份登录,exe 会按预期执行。如果我注销,那么它会失败。服务器是带有 IIS 7 的 Win server 2008。任何帮助将不胜感激。

更新:我已经解决了这个问题,并在 SO 上发布了答案和一些相关问题的链接。简而言之,我需要在 IIS 应用程序池中设置“加载用户配置文件”为真。

感谢大家的贡献

编辑:从评论中提取的代码

Process proc = new Process(); 
proc.StartInfo.FileName = path; 
proc.StartInfo.Arguments = exeparams; 
proc.Start(); 
proc.WaitForExit(); 
stat = proc.ExitCode; 
if (stat != 0) 
{ 
    throw new Functions.log("Error"); 
} 
4

2 回答 2

14

更新:几周后我设法解决了这个问题。谢谢大家的贡献。显然 IIS 默认不加载 windows 用户配置文件。因此,当以未登录的其他用户身份运行时,他们的 Windows 配置文件必须由 IIS 加载。在您的应用程序池的高级设置菜单中,有一个选项“加载 Windows 配置文件”我刚刚将其更改为 true。在 IIS 的早期版本中,默认情况下将其设置为“true”。

具有相同解决方案的关于 SO 的相关问题:

1) ASP.NET 中的安全异常和 IIS 7.5 中的加载用户配置文件选项

2)在 IIS7 上运行 asp.net web 应用程序项目抛出异常

3)新部署的 System.Web.AspNetHostingPermission 异常

另一个 4) http://geekswithblogs.net/ProjectLawson/archive/2009/05/05/iis-system.web.aspnethostingpermission-exception-on-windows-7-rc.aspx

于 2012-12-03T06:18:23.607 回答
8

您可以使用 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);

}
于 2012-12-01T10:39:34.533 回答