Terminal Server (mstsc, msrdp) en ActiveX
Bonjour à tous !
Voilà, dans le cadre de mon emploi, je dois développer un site internet permettant d'accéder à une session Terminal Server, sur l'un de nos serveurs.
Tout existe en ASP.NET 1.1, cependant, pour pallier a des exigences technologiques, il faut le refaire en 2.0, et malheureusement, le code importé tel quel, ne fonctionne pas.
J'ai essayé à partir de diverses sources sur le net, mais rien ne semble fonctionner.
Je dispose du fichier msrdp.cab (et son contenu, le fichier OCX et l'INF), permettant d'installer le controle ActiveX.
Cependant, quand je reprends des sources trouvés sur le net, j'ai un beau message d'erreur...
Voici le code et l'erreur, dont j'ignore la provenance...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
private void Page_Load(object sender, System.EventArgs e)
{
//try
//{
//HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
string ServerName = "192.168.176.100";
string Domain = "";
string UserName = "monlogin";
string Password = "monpass";
string reswidth = "640";
string resheight = "480";
HtmlGenericControl div = new HtmlGenericControl("div");
//div.ID = "connectArea";
//HtmlGenericControl center = new HtmlGenericControl("center");
//div.Controls.Add(center);
// Connect button for testing
//HtmlInputButton rdpButton = new HtmlInputButton();
//rdpButton.Attributes.Add("type", "button");
//rdpButton.Attributes.Add("id", "btnConnect");
//rdpButton.Attributes.Add("name", "ConnectButton");
//rdpButton.Attributes.Add("value", "Connect");
//rdpButton.Attributes.Add("runat", "server");
//rdpButton.Attributes.Add("onclick", "return RdpConnect()");
//Page.Controls.Add(rdpButton);
// MsRdpClient ActiveX object
HtmlGenericControl rdp = new HtmlGenericControl("object");
rdp.Attributes["id"] = "MsRdpClient";
rdp.Attributes["name"] = "MsRdpClient";
rdp.Attributes["classid"] = "clsid:9059f30f-4eb1-4bd2-9fdc-36f43a218f4a";
rdp.Attributes["codebase"] = "~/bin/msrdp.cab#version=5,1,2600,1095";
//rdp.Attributes["runat"] = "server";
rdp.Attributes["width"] = reswidth;
rdp.Attributes["height"] = resheight;
div.Controls.Add(rdp);
Panel p = new Panel();
p.ID = "Panel1";
p.ScrollBars = ScrollBars.Both;
p.Wrap = true;
p.Height = Unit.Percentage(60);
p.Width = Unit.Percentage(100);
p.Controls.Add(div);
Page.Controls.Add(p);
// rdpConnect
StringBuilder rdpConnect = new StringBuilder();
rdpConnect.Append("function RdpConnect()");
rdpConnect.Append("{");
rdpConnect.AppendFormat("MsRdpClient.Server=\"" + ServerName + "\";");
rdpConnect.AppendFormat("MsRdpClient.Domain=\"" + Domain + "\";");
rdpConnect.AppendFormat("MsRdpClient.UserName=\"" + UserName + "\";");
rdpConnect.AppendFormat("MsRdpClient.AdvancedSettings2.ClearTextpassword=\"" + Password + "\";");
rdpConnect.Append("MsRdpClient.FullScreen=0;");
rdpConnect.Append("MsRdpClient.Width=\"" + reswidth + "\";");
rdpConnect.Append("MsRdpClient.Height=\"" + resheight + "\";");
rdpConnect.Append("MsRdpClient.DesktopWidth=\"" + reswidth + "\";");
rdpConnect.Append("MsRdpClient.DesktopHeight=\"" + resheight + "\";");
rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectDrives=0;");
rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectPrinters=1;");
rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectPorts=0;");
rdpConnect.Append("MsRdpClient.AdvancedSettings2.RedirectSmartCards=0 ;");
rdpConnect.Append("if (MsRdpClient.SecuredSettingsEnabled)");
rdpConnect.Append("{");
rdpConnect.Append("MsRdpClient.SecuredSettings.StartProgram=\"notepad.exe\";");
rdpConnect.Append("}");
rdpConnect.AppendFormat("MsRdpClient.FullScreenTitle=\"" + ServerName + "\";");
rdpConnect.Append("MsRdpClient.OnDisconnected=MsRdpClient_OnDisconnec ted();");
rdpConnect.Append("MsRdpClient.Onconnected=MsRdpClient_Onconnected(); ");
rdpConnect.Append("MsRdpClient.Connect()");
rdpConnect.Append("}");
//anu
// MsRdp_onConnected
StringBuilder connected = new StringBuilder();
connected.Append("Function MsRdpClient_OnConnected()");
connected.Append("{");
connected.AppendFormat("Window.Navigate(\"items.aspx?nid=Maintenance\");");
connected.AppendFormat("return true;");
connected.Append("}");
// Insert the javascript function
HtmlGenericControl connectFunction = new HtmlGenericControl("script");
connectFunction.Attributes.Add("type", "text/javacript");
connectFunction.Attributes.Add("language", "javascript");
connectFunction.Attributes["runat"] = "server";
connectFunction.InnerHtml = connected.ToString();
// MsRdp_onDisConnected
StringBuilder disconnected = new StringBuilder();
disconnected.Append("Function MsRdpClient_OnDisconnected()");
disconnected.Append("{");
disconnected.AppendFormat("history.go(-1)");
//disconnected.AppendFormat("Window.Navigate(\"items.aspx?nid=Maintenance\");");
disconnected.AppendFormat("return true;");
disconnected.Append("}");
// Insert the javascript function
HtmlGenericControl disconnectFunction = new HtmlGenericControl("script");
disconnectFunction.Attributes.Add("type", "text/javacript");
disconnectFunction.Attributes.Add("language", "javascript");
disconnectFunction.Attributes["runat"] = "server";
disconnectFunction.InnerHtml = disconnected.ToString();
Page.Controls.Add(disconnectFunction);
//here
// Insert the javascript function
HtmlGenericControl rdpFunctions = new HtmlGenericControl("script");
rdpFunctions.Attributes.Add("type", "text/javascript");
rdpFunctions.Attributes.Add("language", "javascript");
rdpFunctions.Attributes["runat"] = "server";
rdpFunctions.InnerHtml = rdpConnect.ToString();
Page.Controls.Add(rdpFunctions);
// call the Javascript function RdpConnect() here
LiteralControl rdpconnect = new LiteralControl("<script type='text/javascript'>RdpConnect();</script>");
Page.Controls.Add(rdpconnect);
//p.Controls.Add(rdpconnect);
//}
//catch (Exception e)
//{
// FormsAuthentication.SignOut();
// Response.Redirect("Login.aspx", true);
//}
} |
Et l'erreur rencontrée est :
La collection Controls ne peut pas être modifiée, car le contrôle contient des blocs de code (c'est-à-dire <% ... %>).
Ceci intervient lorsque je fais le "Page.Controls.Add(p);" (ligne 46 du code, lors de la création du Panel)
Auriez-vous une idée de la manière de procéder, même si je dois pour cela revoir tout mon code, afin de parvenir à faire marcher ce satané contrôle ActiveX MSRDP...
Merci beaucoup à ceux qui prendront le temps de lire, et encore plus à ceux qui réfléchiront, et trouveront une solution.
Ciao ciao ! ^^