ExtenderWrapperIpc.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using OxfordExtenderWrapper;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. using System.Runtime.Remoting.Channels;
  7. using System.Runtime.Remoting.Channels.Ipc;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace OTSMeasureApp.ServiceCenter.OxfordExtender
  13. {
  14. static class ExtenderWrapperIpc
  15. {
  16. static ExtenderIpcUI extenderRemoteObj =null;
  17. public static ExtenderIpcUI GetExtenderWrapper()
  18. {
  19. if (extenderRemoteObj == null)
  20. {
  21. Process[] processes = Process.GetProcessesByName("OxfordExtenderWrapper");
  22. System.Diagnostics.Process p;
  23. if (processes.Length == 0)
  24. {
  25. p = System.Diagnostics.Process.Start(Application.StartupPath + "\\OxfordExtender\\OxfordExtenderWrapper.exe", "hide");
  26. Thread.Sleep(800);
  27. IpcClientChannel channel = new IpcClientChannel();
  28. //Register the channel with ChannelServices.
  29. ChannelServices.RegisterChannel(channel, false);
  30. extenderRemoteObj = (ExtenderIpcUI)Activator.GetObject(typeof(ExtenderIpcUI), "ipc://ExtenderServerChannel/ExtenderIpcUI");
  31. //extenderRemoteObj.ConnectToEDSHardware();
  32. return extenderRemoteObj;
  33. }
  34. else
  35. {
  36. IpcClientChannel channel = new IpcClientChannel();
  37. //Register the channel with ChannelServices.
  38. ChannelServices.RegisterChannel(channel, false);
  39. extenderRemoteObj = (ExtenderIpcUI)Activator.GetObject(typeof(ExtenderIpcUI), "ipc://ExtenderServerChannel/ExtenderIpcUI");
  40. //extenderRemoteObj.ConnectToEDSHardware();
  41. return extenderRemoteObj;
  42. }
  43. }
  44. extenderRemoteObj.ConnectToEDSHardware();//reconnect ,prevent the connection be closed by other reason accidentally.
  45. return extenderRemoteObj;
  46. }
  47. internal static void KillExtenderWrapperProcess()
  48. {
  49. Process[] processes = Process.GetProcessesByName("OxfordExtenderWrapper");
  50. //if (processes.Length!=0)
  51. //{
  52. // processes[0].Kill();
  53. //}
  54. extenderRemoteObj.CloseExtender();
  55. }
  56. }
  57. }