Dot Net предлагает удаленную помощь

#c# #.net #remote-desktop

#c# #.net #удаленный рабочий стол

Вопрос:

Я уже несколько месяцев безуспешно пытаюсь использовать встроенную в Windows функцию удаленной помощи с незапрошенным предложением, встроенную в мое приложение.

чтобы было ясно, это точно такая же функциональность, как msra / offerRA имя_компьютера. где эксперт может предложить удаленную помощь новичку без необходимости создавать ticketstring вручную. Насколько мне известно, это достигается с помощью DCOM для передачи информации с помощью RAserver, а затем MSRA берет на себя фактическое соединение. Я подтвердил, что могу использовать MSRA / OfferRA имя_компьютера, так что функциональность есть.

Я перепробовал много API / DLL, и я все еще не могу понять, как предложить удаленную помощь в OFFERRA

Я попробовал следующие модули. AxRDPCOMAPILib RDPCOMAPILib RAServerLib RendezvousSessionLib

я перепробовал так много различных вариантов кода, что невозможно разместить их все здесь. мне нужна помощь, чтобы узнать, как использовать функциональность OfferRA с помощью Windows Remote Assistance. Я НЕ хочу создавать одноранговое приложение. я хотел бы, чтобы мое приложение подключалось к удаленной службе поддержки на клиентском компьютере с помощью MSRA, установленного на их компьютере от Microsoft.

Любая помощь будет оценена.

Попытка кодирования 1:

         AxRDPViewer Viewer = new AxRDPViewer();
        Viewer.BeginInit();
        Viewer.SuspendLayout();
        RemoteAssistanceWindow.Child = Viewer;
        Viewer.ResumeLayout();
        Viewer.EndInit();
        ((AxRDPViewer)RemoteAssistanceWindow.Child).Connect("DZ0006", "MySecretUsername", "MySecretPassword");
 

Результаты:

Первое случайное исключение типа ‘System.Исключение ArgumentException’ произошло в AxRDPCOMAPILib.dll

Программа»[4936] Enterprise.vshost.exe : Трассировка программы завершилась с кодом 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 : Трассировка программы завершилась с кодом 0 (0x0).

Программа ‘[7520] Enterprise.vshost.exe ‘вышел с кодом -1073741819 (0xc0000005) ‘Нарушение доступа’.

Комментарии:

1. кажется, я не могу использовать OfferRA, используя библиотеки. У RAserverLib есть интерфейс IIMOfferRA, но я не могу его использовать. ничего не происходит. никаких журналов событий и записей в окне вывода. просто это программа»[6388] Enterprise.exe : Трассировка программы завершилась с кодом 0 (0x0). Программа»[6388] Enterprise.exe ‘ вышел с кодом 0 (0x0).

Ответ №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;
            }           
        }
    }
}
 

Комментарии:

1. Вместо того чтобы просто вставлять код, ваш ответ мог бы быть более полезным, если бы вы объяснили, как он решает рассматриваемую проблему.

2. Это простое решение, которое использует аргументы MSRA для предоставления удаленной помощи и запроса удаленной помощи в один клик. Код, стоящий за командными кнопками, вызывает MSRA и передает два разных аргумента для функций удаленной помощи и Запроса помощи.

3. Спасибо. Я вижу, что их сообщение также было обновлено. Кстати, это не я проголосовал против. Печально, что многие делают это, не оставляя комментариев, почему. Было бы полезно узнать, почему, и извлечь из этого урок.

4. Не беспокойтесь, приятель … не очень заботьтесь о голосах, просто хочу убедиться, что это будет полезно для кого-то вроде нас.