Хостинг сеанса RemoteAPP в Winform
Продолжайте возвращаться к этому и не можете понять это... Я создаю приложение для работы, которое по существу компилирует все наши инструменты в один простой в использовании графический интерфейс. Одним из инструментов, которые мы используем, является то, что мы используем от сторонней стороны и размещаем в качестве удаленного приложения через RDWeb. Теперь у меня также есть обычный доступ к удаленному рабочему столу, и я могу получить доступ к рабочему столу через мою Winform, используя MSTSC и этот процесс, который прекрасно работает. Мне любопытно, можно ли просто загрузить RemoteAPP, а не весь рабочий стол в элементе управления MSTSC, чтобы мои пользователи не попадали на полный рабочий стол. Или, если есть какой-либо другой способ размещения RemoteAPP только в Winforms.
Я просмотрел документацию MSDN на ITSRemoteProgram, но когда я попробую следующее, он просто выдает исключение. Отладчик останавливается на rdp.RemoteProgram.RemoteProgramMode = true;
и дает исключение HRESULT E_FAIL.
Я также попытался использовать remoteprogram
после возникновения события OnConnected, и я получаю те же результаты.
try
{
rdp.Server = "FFWIN2008R2DC.fflab123.net";
rdp.Domain = "fflab123";
rdp.UserName = "administrator";
IMsTscNonScriptable secured = (IMsTscNonScriptable)rdp.GetOcx();
secured.ClearTextPassword = "password123";
rdp.OnConnected += rdp_OnConnected;
rdp.RemoteProgram.RemoteProgramMode = true;
rdp.RemoteProgram2.RemoteApplicationName = "Calculator";
rdp.RemoteProgram2.RemoteApplicationProgram = @"C:\Windows\system32\calc.exe";
rdp.Connect();
}
catch (Exception Ex)
{
MessageBox.Show("Error Connecting", "Error connecting to remote desktop " + " Error: " + Ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Возможно, я собираюсь сделать это неправильно или, возможно, даже не возможно. Я просто хотел бы подтолкнуть в правильном направлении. Мне не нужен кто-нибудь, чтобы написать это для меня.
Ответы
Ответ 1
IMsRdpClient.RemoteProgram.RemoteProgramMode
действителен только для клиентов, инициализированных идентификаторами класса MsRdpClientNotSafeForScripting
. См. эту страницу MSDN для соответствующих CLSID или используйте класс AxMsRdpClientNotSafeForScripting
interop.
var rc = new AxMsRdpClient7NotSafeForScripting();
rc.Dock = DockStyle.Fill;
this.Controls.Add(rc);
rc.RemoteProgram.RemoteProgramMode = true;
// ServerStartProgram can only be called on an open session; wait for connected until calling
rc.OnConnected += (_1, _2) => { rc.RemoteProgram.ServerStartProgram(@"%SYSTEMROOT%\notepad.exe", "", "%SYSTEMROOT%", true, "", false); };
rc.Server = "server.name";
rc.UserName = "domain\\user";
// needed to allow password
rc.AdvancedSettings7.PublicMode = false;
rc.AdvancedSettings7.ClearTextPassword = "password";
// needed to allow dimensions other than the size of the control
rc.DesktopWidth = SystemInformation.VirtualScreen.Width;
rc.DesktopHeight = SystemInformation.VirtualScreen.Height;
rc.AdvancedSettings7.SmartSizing = true;
rc.Connect();