1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core;
using Tango.Core.Components;
using Tango.PPC.Common.Connection;
namespace Tango.PPC.Common.RemoteAssistance
{
/// <summary>
/// Represents the default remote assistance provider.
/// </summary>
/// <seealso cref="Tango.Core.ExtendedObject" />
/// <seealso cref="Tango.PPC.Common.RemoteAssistance.IRemoteAssistanceProvider" />
public class DefaultRemoteAssistanceProvider : ExtendedObject, IRemoteAssistanceProvider
{
private IMachineProvider _machineProvider;
private String _installer_path = "C:\\Installers\\TeamViewer_Host.msi";
private bool _isEnabled;
/// <summary>
/// Gets a value indicating whether the remote assistance service is enabled.
/// </summary>
public bool IsEnabled
{
get { return _isEnabled; }
private set { _isEnabled = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Initializes a new instance of the <see cref="DefaultRemoteAssistanceProvider"/> class.
/// </summary>
/// <param name="machineProvider">The machine provider.</param>
public DefaultRemoteAssistanceProvider(IMachineProvider machineProvider)
{
_machineProvider = machineProvider;
}
/// <summary>
/// Enables the remote assistance.
/// </summary>
/// <returns></returns>
public async Task EnableRemoteAssistance()
{
if (!IsEnabled)
{
try
{
CmdCommand command = new CmdCommand("sc.exe", "config TeamViewer start=auto");
command.Timeout = TimeSpan.FromSeconds(10);
await command.Run();
command = new CmdCommand("net", "start TeamViewer");
command.Timeout = TimeSpan.FromSeconds(10);
await command.Run();
IsEnabled = true;
}
catch (Exception ex)
{
LogManager.Log(ex, "Error enabling remote assistance.");
}
}
}
/// <summary>
/// Disables the remote assistance.
/// </summary>
/// <returns></returns>
public async Task DisableRemoteAssistance()
{
if (IsEnabled)
{
try
{
CmdCommand command = new CmdCommand("sc.exe", "config TeamViewer start=disabled");
command.Timeout = TimeSpan.FromSeconds(10);
await command.Run();
command = new CmdCommand("net", "stop TeamViewer");
command.Timeout = TimeSpan.FromSeconds(10);
await command.Run();
IsEnabled = false;
}
catch (Exception ex)
{
LogManager.Log(ex, "Error disabling remote assistance.");
}
}
}
/// <summary>
/// Installs the remote assistance.
/// </summary>
/// <param name="machineSerialNumber">The machine serial number.</param>
/// <param name="group">The remote assistance group.</param>
/// <param name="environment">The machine working environment.</param>
/// <returns></returns>
/// <exception cref="FileNotFoundException"></exception>
/// <exception cref="ApplicationException">The remote assistance service was installed but could not be found.</exception>
public async Task InstallRemoteAssistance(String machineSerialNumber, String group, String environment)
{
try
{
if (!File.Exists(_installer_path))
{
throw new FileNotFoundException($"The remote assistance installer file could not be found at {_installer_path}.");
}
String q = "\"";
//CmdCommand command = new CmdCommand("msiexec.exe", $"/i \"{_installer_path}\" /qn CUSTOMCONFIGID=ke43ann APITOKEN=4765529-gon1LwO1N1TTrlLI21ji ASSIGNMENTOPTIONS=\" --reassign --alias {"TANGO-" + machineSerialNumber}-{environment} --grant-easy-access\"");
CmdCommand command = new CmdCommand("msiexec.exe", $"/i {q}{_installer_path}{q} /qn CUSTOMCONFIGID=ke43ann APITOKEN=4765529-gon1LwO1N1TTrlLI21ji ASSIGNMENTOPTIONS={q} --group {q}{q} {group} {q}{q} --reassign --alias TANGO-{machineSerialNumber}-{environment} --grant-easy-access{q}");
command.Timeout = TimeSpan.FromSeconds(30);
await command.Run();
bool exist = await IsRemoteAssistanceInstalled();
if (exist)
{
await DisableRemoteAssistance();
}
else
{
throw new ApplicationException("The remote assistance service was installed but could not be found.");
}
}
catch (Exception ex)
{
LogManager.Log(ex, "Error installing remote assistance.");
throw;
}
}
/// <summary>
/// Determines whether remote assistance is currently installed.
/// </summary>
/// <returns></returns>
private async Task<bool> IsRemoteAssistanceInstalled()
{
bool exist = false;
for (int i = 0; i < 6; i++)
{
LogManager.Log("Checking remote assistance service...");
await Task.Delay(1000);
CmdCommand command = new CmdCommand("sc.exe", "query TeamViewer");
try
{
await command.Run();
exist = true;
break;
}
catch { }
}
if (exist)
{
LogManager.Log("Remote assistance service found.");
}
else
{
LogManager.Log("Remote assistance service was not found.");
}
return exist;
}
}
}
|