0

C# でターミナル サービス セッションにログインしているユーザーの DataGrid を設定する .bat ファイル (コード: rwvinstat /server:servername) を使用するコードを作成しました。.bat は、アプリと共にサーバー上に存在します。ファイルであり、サーバー上で手動で実行すると正しく実行されます。また、アプリを実行すると. ローカルで .bat ファイルを呼び出し、サーバー上で正常に動作します。

問題は、Web アプリをサーバーにデプロイすると、DataGrid が読み込まれず、エラーも発生しないことです。IUSER_MACHINENAME (およびさまざまなユーザー) に完全なアクセス許可を与え、仮想ディレクトリのアクセス許可を読み取り、実行、実行に設定しました。また、web.conf の図を次のように設定しました:< "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)
{

}
}
4

2 に答える 2

0

アプリケーション プールが実行されているユーザーに、適切なリモート デスクトップ サービスのアクセス許可を付与しましたか?

また、目的に合わせてCassia ライブラリを使用する方が少し簡単であることに気付くかもしれません。

于 2011-02-12T20:05:01.620 に答える
0

バッチ ファイルが呼び出している実行可能ファイル (rwvinstat) はシステム パスにありますか? 明示的に呼び出す必要がある場合があります - c:\windows\system32\rwvinstat.exe またはそれが配置されている場所。

于 2010-10-07T02:56:13.327 に答える