【问题标题】:Execute .Bat File in C# ASP.net was not working after I published in IIS在 IIS 中发布后,在 C# ASP.net 中执行 .Bat 文件不起作用
【发布时间】:2018-04-25 04:58:36
【问题描述】:

这是我当前的代码。但我认为问题出在 IIS 上,因为我在调试模式下尝试了这个并且它可以工作,并且当我发布 bat 文件时不会打开。

public  ActionResult Print(int? id)
    {

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Item item =  db.Items.Find(id);
        Origin origin =  db.Origins.Where(x => x.OriginMainID == item.OriginMainID && x.IsActive == true).FirstOrDefault();
        var user =  UserManager.FindById(item.CreatedBy);
        string fileLoc = @"e:\SAMPLE.txt";
        string text = "";
        text += item.PropertyCode + "," + origin.Assignee.LName + " " + origin.Assignee.FName + "," + origin.Assignee.Department.ShortCode + "," + user.LastName + " " + user.FirstName + "," + origin.Assignee.CMID;
        if (System.IO.File.Exists(fileLoc))
        {
            using (StreamWriter sw = new StreamWriter(fileLoc))
            {
                sw.Write(text);
            }
        }
        if (item == null && origin == null)
        {
            return HttpNotFound();
        }

         Process.Start(@"C:\PANDA.bat");
        return RedirectToAction("Index");
    }

【问题讨论】:

  • 运行 ASP.NET 主机进程的用户是否有权访问批处理文件和位置? IIS 似乎不太可能访问c:\panda.bat
  • bat 文件的性质是什么(即它试图执行什么程序)?请记住,IIS 应用程序在应用程序池中运行,通常作为具有很少权限的低权限用户,并且无法访问交互式会话(即桌面、窗口等)
  • 我的bat文件内容代码如下:C:CD\CD\PROGRAM FILES\BARTENDER BARTEND.EXE /F=e:\SAMPLE1.BTW /P /X

标签: c# asp.net batch-file iis


【解决方案1】:

而不是写Process.Start(@"C:\PANDA.bat"); 尝试使用以下 sn-p。

Process proc = new Process();
proc.StartInfo.FileName = @"C:\PANDA.bat";
proc.StartInfo.Verb = "runas";
proc.Start();

proc.StartInfo.Verb = "runas";此行将在托管环境中以管理员身份执行代码,因此它将在 IIS 上运行。

【讨论】:

  • 感谢先生的精彩评论和解释。我试过你的代码,但没有用。
  • 在调试模式下,它可以工作,但是当我在 IIS 中发布时它没有工作
  • runas 不会神奇地让事情以管理员身份运行。如果当前用户帐户不是管理员或者是使用受限令牌运行的管理员,则需要显示 UAC 提示 - 但 IIS 通常运行在没有人登录的机器上响应 UAC 提示符。
【解决方案2】:

您的 IIS 将在 IIS_USRS 组的特殊用户或在模拟下使用的特定帐户下工作。 在这种情况下,您需要执行以下操作:-

  1. 文件访问来自一个目录,而不是来自驱动器的根目录。只有管​​理员可以从 root 访问文件。可能您的用户帐户是您机器上的管理员,因此您在通过 VS 运行时不会注意到这一点
  2. 为您的 Web 应用程序设置一个特定帐户,并为该帐户授予对包含批处理文件的文件夹的执行权限。然后在您的 web.config 中设置模拟并提供该用户的帐户名。

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多