Dot Net提供远程协助

时间:2014-06-23 02:24:47

标签: c# .net remote-desktop

我一直试图在我的应用程序中使用内置于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) '访问违规'。

1 个答案:

答案 0 :(得分:1)

使用MSRA Exe及其参数的远程协助。

在这里,我设计了一个类和一个表单,它为您提供了以下功能,

  1. 为机器提供远程协助
  2. 要求远程帮助。 (邀请别人帮助你)

设计包含以下控件的表单

  1. 用于将IP或计算机名称用于连接的文本框
  2. 按钮1.连接到远程计算机以提供远程协助
  3. 按钮2.要求或邀请别人帮助。

表格背后的代码:

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;
            }           
        }
    }
}