Выполнить .Bat файл в C # ASP.net не работал после публикации в IIS - PullRequest
0 голосов
/ 25 апреля 2018

Batch file properties

Это мой текущий код.Но я думаю, что проблема была в 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");
    }

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Ваш IIS будет работать под специальным пользователем, либо группой IIS_USRS, либо под определенной учетной записью, используемой для олицетворения. В этом случае вам нужно сделать следующее: -

  1. Доступ к файлу осуществляется из каталога, а не из корня диска. Только администратор может получить доступ к файлу из корня. Возможно, ваша учетная запись администратора на вашем компьютере, поэтому вы не замечаете этого во время работы через VS
  2. Установите конкретную учетную запись для своего веб-приложения и предоставьте разрешения на выполнение для этой учетной записи в папке, содержащей пакетный файл. Затем в файле web.config настройте олицетворение и укажите имя учетной записи этого пользователя.
0 голосов
/ 25 апреля 2018

Вместо записи Process.Start(@"C:\PANDA.bat"); Попробуйте использовать следующий фрагмент:

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

proc.StartInfo.Verb = "runas";Эта строка будет выполнять код от имени администратора в размещенной среде, поэтому она будет работать в IIS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...