views:

16

answers:

1

I have written code that uses a .bat file (code: rwvinstat /server:servername) that populates a DataGrid of users logged in to a terminal service session in c#. The .bat lives on the server with the app. files and will run properly if executed manually on the server .Also if i run the app. locally and call the .bat file on the server it works fine.

The problem is when i deploy my web app on the server the DataGrid never populates nor do i get any errors. i have given full permissions to IUSER_MACHINENAME(and various users) and i set the virtual directory permissions to read, run, execute. Ialso have set my web.conf fig to:< "identity impersonate="true" userName="username" password="password"/>

Here is my Source code:

      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)
{

}
}
A: 

Is the executable that the batch file is calling (rwvinstat) in the system path? You might need to call it explicitly - c:\windows\system32\rwvinstat.exe or wherever it is located.