C # asp.net Отключение сеанса обслуживания терминала пользователя через локальную сеть loacl - PullRequest
0 голосов
/ 11 августа 2010

Я написал код, который использует файл .bat (код: rwvinstat / server: servername), который заполняет DataGrid пользователей, вошедших в сеанс обслуживания терминала в c #. .Bat живет на сервере с приложением. файлы и будет работать правильно, если выполняется вручную на сервере. Также, если я запускаю приложение. локально и вызвать файл .bat на сервере, он работает нормально.

Проблема в том, что при развертывании моего веб-приложения на сервере DataGrid никогда не заполняется, и при этом я не получаю никаких ошибок. Я дал полные разрешения IUSER_MACHINENAME (и различным пользователям), и я установил разрешения виртуального каталога для чтения, запуска, выполнения. Я также установил в своем web.conf fig: <"identity impersonate =" true "userName =" username "password =" password "/>

Вот мой исходный код:

      using System;
      using System.Collections;
      using System.Configuration;
      using System.Data;
      using System.Linq;
      using System.Web;
      using System.Web.Security;
      using System.Web.UI;
      using System.Web.UI.HtmlControls;
      using System.Web.UI.WebControls;
      using System.Web.UI.WebControls.WebParts;
      using System.Xml.Linq;
      using System.Text;
      using System.Runtime.InteropServices;
      using System.Text.RegularExpressions;
      using System.IO;

        public partial class ilsap01_users : System.Web.UI.Page
        {

          protected void Page_Load(object sender, EventArgs e)
          {

     System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("C:\\listUsersIlsap01.bat"); 
    psi.RedirectStandardOutput = true;
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    psi.UseShellExecute = false;
    System.Diagnostics.Process listFiles;
    listFiles = System.Diagnostics.Process.Start(psi);
    System.IO.StreamReader rawUserData = listFiles.StandardOutput;
    listFiles.WaitForExit(20000);
    try
    {
        DataTable table2 = new DataTable();
        table2.Columns.Add(new DataColumn("UserName", typeof(string)));
        table2.Columns.Add(new DataColumn("SessionId", typeof(string)));

        String myString = rawUserData.ReadToEnd();

        string exp = @"([\w_]+)"; ;


        MatchCollection matches = Regex.Matches(myString, exp, RegexOptions.IgnoreCase);

        IEnumerator en = matches.GetEnumerator();
        if (en.MoveNext())
        {
            while (en.MoveNext())
            {


                Match match = (Match)en.Current;

                if (en.Current.ToString() == "rdpwd")
                {
                    if (en.MoveNext())
                    {
                        if (en.Current.ToString() == "rdp")
                        {
                            en.MoveNext();
                            en.MoveNext();
                            en.MoveNext();

                            Match match_Item = (Match)en.Current;

                            string item = match_Item.Value;

                            en.MoveNext();

                            Match match_Item2 = (Match)en.Current;

                            string item2 = match_Item2.Value;

                            DataRow row = table2.NewRow();
                            row[0] = item.Split()[0];
                            row[1] = item2.Split()[0];

                            table2.Rows.Add(row);

                        }
                    }
                }
            }
        }

        this.displayUsers.DataSource = table2;
        this.displayUsers.DataBind();
    }

    catch (Exception ex)
    {
        Response.Write(ex);
    }
}
protected void dg_SelectedIndexChanged(object sender, EventArgs e)
{

}
protected void Button2_Click(object sender, EventArgs e)
{
    Response.Redirect("ILSRF01_USERS.ASPX");
}
protected void Button1_Click(object sender, EventArgs e)
{

}
}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2011

Предоставили ли вы пользователю, что пул приложений работает как соответствующие права Службы удаленных рабочих столов ?

Кроме того, вам может показаться, что библиотека Cassia немного проще в ваших целях.

0 голосов
/ 07 октября 2010

Является ли исполняемый файл, который вызывает командный файл (rwvinstat) в системном пути?Вам может потребоваться вызвать его явно - c: \ windows \ system32 \ rwvinstat.exe или где бы он ни находился.

...