我一直试图在我的应用程序中使用内置于Windows中的未经请求的远程协助功能数月,但没有成功。
要清楚,这与msra / offerRA computername完全相同。 专家可以为新手提供远程协助,而新手不必手动创建票据串。 据我所知,这是使用DCOM使用RAserver传递信息,然后MSRA接管实际连接。 我已经确认我可以使用MSRA / OfferRA ComputerName,因此功能就在那里。
我尝试了很多API / DLL,我仍然无法弄清楚如何在OFFERRA中提供远程协助
我已经完成了以下模块。 AxRDPCOMAPILib RDPCOMAPILib RAServerLib RendezvousSessionLib
我已经尝试了很多不同的代码变体,因此无法将它们全部发布到此处。我需要一些帮助才能知道如何使用Windows远程协助来使用OfferRA功能。 我不想创建一个点对点应用程序。我希望我的应用程序使用Microsoft的计算机上安装的MSRA连接到客户端计算机上的远程协助。
任何帮助都将不胜感激。
尝试过Code1:
AxRDPViewer Viewer = new AxRDPViewer();
Viewer.BeginInit();
Viewer.SuspendLayout();
RemoteAssistanceWindow.Child = Viewer;
Viewer.ResumeLayout();
Viewer.EndInit();
((AxRDPViewer)RemoteAssistanceWindow.Child).Connect("DZ0006", "MySecretUsername", "MySecretPassword");
结果:
AxRDPCOMAPILib.dll中出现'System.ArgumentException'类型的第一次机会异常
程序'[4936] Enterprise.vshost.exe:Program Trace'已退出,代码为0(0x0)。
程序'[4936] Enterprise.vshost.exe'已退出,代码为-1073741819(0xc0000005)'访问违规'。
更新2:
RDPViewer Viewer = new RDPViewer();
IMRequestRA Request = new IMRequestRA();
Request.SetRendezvousSession(Viewer);
线程0x1c60已退出,代码为259(0x103)。
程序'[7520] Enterprise.vshost.exe:Program Trace'已退出,代码为0(0x0)。
程序'[7520] Enterprise.vshost.exe'已退出,代码为-1073741819(0xc0000005) '访问违规'。
答案 0 :(得分:1)
使用MSRA Exe及其参数的远程协助。
在这里,我设计了一个类和一个表单,它为您提供了以下功能,
设计包含以下控件的表单
表格背后的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace RemoteAssist
{
public partial class FrmConnect : Form
{
public FrmConnect()
{
InitializeComponent();
}
private void btnConnect_Click(object sender, EventArgs e)
{
RemoteConnect remoteConnect = new RemoteConnect();
Boolean status = remoteConnect.StartRemoteAssistance(txtComputerName.Text.ToString(), true,false);
if (status == false)
{
System.Windows.Forms.MessageBox.Show("Unable to Connect to the Remote Machine.Please try Again later.");
}
}
private void BtnInvite_Click(object sender, EventArgs e)
{
RemoteConnect remoteConnect = new RemoteConnect();
Boolean status;
status = remoteConnect.StartRemoteAssistance(txtComputerName.Text.ToString(), false, true);
if (status == false)
{
System.Windows.Forms.MessageBox.Show("Unable to Establish Connection, Please try Again later.");
}
}
private void FrmConnect_Load(object sender, EventArgs e)
{
}
private void txtComputerName_TextChanged(object sender, EventArgs e)
{
txtComputerName.CharacterCasing = CharacterCasing.Upper;
}
}
}
我们这里有两个按钮,他们将布尔变量发送到类函数,以区分商品帮助和求助帮助。
类文件下的代码:RemoteConnect
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RemoteAssist
{
class RemoteConnect
{
public Boolean StartRemoteAssistance(String strMachinename, Boolean offerHelp, Boolean askForHelp)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
startInfo.FileName = "msra.exe";
// Offer Remote Assitance
if (offerHelp == true)
{
startInfo.Arguments = "/offerRA " + strMachinename;
}
//ASK for Remote Assistance
if (askForHelp == true)
{
startInfo.Arguments = "novice";
}
try
{
process.StartInfo = startInfo;
process.Start();
return true;
}
catch (Exception ex)
{
//System.Windows.Forms.MessageBox.Show("Error Occured while trying to Connect" + ex.Message);
return false;
}
}
}
}