diff --git a/Agent.Installer.Win/Agent.Installer.Win.csproj b/Agent.Installer.Win/Agent.Installer.Win.csproj
new file mode 100644
index 00000000..8ee37629
--- /dev/null
+++ b/Agent.Installer.Win/Agent.Installer.Win.csproj
@@ -0,0 +1,133 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}
+ WinExe
+ Remotely.Agent.Installer.Win
+ Remotely_Installer
+ v4.6.2
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+ true
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ favicon.ico
+
+
+ app.manifest
+
+
+
+ ..\packages\Costura.Fody.4.1.0\lib\net40\Costura.dll
+
+
+
+
+
+ C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Runtime.Serialization.dll
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
\ No newline at end of file
diff --git a/Agent.Installer.Win/App.config b/Agent.Installer.Win/App.config
new file mode 100644
index 00000000..b50c74f3
--- /dev/null
+++ b/Agent.Installer.Win/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Agent.Installer.Win/App.xaml b/Agent.Installer.Win/App.xaml
new file mode 100644
index 00000000..724c4c15
--- /dev/null
+++ b/Agent.Installer.Win/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Agent.Installer.Win/App.xaml.cs b/Agent.Installer.Win/App.xaml.cs
new file mode 100644
index 00000000..66067606
--- /dev/null
+++ b/Agent.Installer.Win/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace Remotely.Agent.Installer.Win
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/Agent.Installer.Win/MainWindow.xaml b/Agent.Installer.Win/MainWindow.xaml
new file mode 100644
index 00000000..65759621
--- /dev/null
+++ b/Agent.Installer.Win/MainWindow.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/Agent.Installer.Win/MainWindow.xaml.cs b/Agent.Installer.Win/MainWindow.xaml.cs
new file mode 100644
index 00000000..35eba98e
--- /dev/null
+++ b/Agent.Installer.Win/MainWindow.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Remotely.Agent.Installer.Win
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Agent.Installer.Win/Models/InstallerSettings.cs b/Agent.Installer.Win/Models/InstallerSettings.cs
new file mode 100644
index 00000000..5288a6b7
--- /dev/null
+++ b/Agent.Installer.Win/Models/InstallerSettings.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Remotely.Agent.Installer.Win
+{
+ [DataContract]
+ public class InstallerSettings
+ {
+ [DataMember]
+ public string OrganizationID { get; set; }
+ }
+}
diff --git a/Agent.Installer.Win/Properties/AssemblyInfo.cs b/Agent.Installer.Win/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..38a0d006
--- /dev/null
+++ b/Agent.Installer.Win/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Remotely Installer")]
+[assembly: AssemblyDescription("An installer for the Remotely service, which provides unattended remote access and remote scripting.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Translucency Software")]
+[assembly: AssemblyProduct("Remotely Installer")]
+[assembly: AssemblyCopyright("Copyright © 2020 Translucency Software")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Agent.Installer.Win/Properties/Resources.Designer.cs b/Agent.Installer.Win/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..369f8620
--- /dev/null
+++ b/Agent.Installer.Win/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Remotely.Agent.Installer.Win.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Remotely.Agent.Installer.Win.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Agent.Installer.Win/Properties/Resources.resx b/Agent.Installer.Win/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/Agent.Installer.Win/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Agent.Installer.Win/Properties/Settings.Designer.cs b/Agent.Installer.Win/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..d4a5056d
--- /dev/null
+++ b/Agent.Installer.Win/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Remotely.Agent.Installer.Win.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Agent.Installer.Win/Properties/Settings.settings b/Agent.Installer.Win/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/Agent.Installer.Win/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Agent.Installer.Win/Services/InstallerService.cs b/Agent.Installer.Win/Services/InstallerService.cs
new file mode 100644
index 00000000..8a63b5c0
--- /dev/null
+++ b/Agent.Installer.Win/Services/InstallerService.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration.Install;
+using System.Diagnostics;
+using System.Linq;
+using System.ServiceProcess;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Remotely.Agent.Installer.Win.Services
+{
+ public class InstallerService
+ {
+ private void InstallService(List args)
+ {
+ try
+ {
+ Logger.Write("Install started.");
+ var installPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
+ var serv = ServiceController.GetServices().FirstOrDefault(ser => ser.ServiceName == "Remotely_Service");
+ if (serv == null)
+ {
+ string[] command = new String[] { "/assemblypath=" + installPath };
+ ServiceInstaller ServiceInstallerObj = new ServiceInstaller();
+ InstallContext Context = new InstallContext("", command);
+ ServiceInstallerObj.Context = Context;
+ ServiceInstallerObj.DisplayName = "Remotely Service";
+ ServiceInstallerObj.Description = "Background service that maintains a connection to the Remotely server. The service is used for remote support and maintenance by this computer's administrators.";
+ ServiceInstallerObj.ServiceName = "Remotely_Service";
+ ServiceInstallerObj.StartType = ServiceStartMode.Automatic;
+ ServiceInstallerObj.DelayedAutoStart = true;
+ ServiceInstallerObj.Parent = new ServiceProcessInstaller();
+
+ System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary();
+ ServiceInstallerObj.Install(state);
+ }
+ serv = ServiceController.GetServices().FirstOrDefault(ser => ser.ServiceName == "Remotely_Service");
+ if (serv != null && serv.Status != ServiceControllerStatus.Running)
+ {
+ serv.Start();
+ }
+ var psi = new ProcessStartInfo("cmd.exe", "/c sc.exe failure \"Remotely_Service\" reset=5 actions=restart/5000");
+ psi.WindowStyle = ProcessWindowStyle.Hidden;
+ Process.Start(psi).WaitForExit();
+ }
+ catch (Exception ex)
+ {
+ Logger.Write(ex);
+ }
+ }
+ }
+}
diff --git a/Agent.Installer.Win/Services/Logger.cs b/Agent.Installer.Win/Services/Logger.cs
new file mode 100644
index 00000000..69709bc7
--- /dev/null
+++ b/Agent.Installer.Win/Services/Logger.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Remotely.Agent.Installer.Win.Services
+{
+ public class Logger
+ {
+ private static string LogPath => Path.Combine(Path.GetTempPath(), "Remotely_Installer.log");
+ private static object WriteLock { get; } = new object();
+ public static void Debug(string message)
+ {
+ lock (WriteLock)
+ {
+#if DEBUG
+ CheckLogFileExists();
+
+ File.AppendAllText(LogPath, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[DEBUG]\t{message}{Environment.NewLine}");
+
+#endif
+ System.Diagnostics.Debug.WriteLine(message);
+ }
+
+ }
+
+ public static void Write(string message)
+ {
+ try
+ {
+ lock (WriteLock)
+ {
+ CheckLogFileExists();
+ File.AppendAllText(LogPath, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[INFO]\t{message}{Environment.NewLine}");
+ Console.WriteLine(message);
+ }
+ }
+ catch { }
+ }
+
+ public static void Write(Exception ex)
+ {
+ lock (WriteLock)
+ {
+ try
+ {
+ CheckLogFileExists();
+
+ var exception = ex;
+
+ while (exception != null)
+ {
+ File.AppendAllText(LogPath, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[ERROR]\t{exception?.Message}\t{exception?.StackTrace}\t{exception?.Source}{Environment.NewLine}");
+ Console.WriteLine(exception.Message);
+ exception = exception.InnerException;
+ }
+ }
+ catch { }
+ }
+ }
+
+ private static void CheckLogFileExists()
+ {
+ if (!File.Exists(LogPath))
+ {
+ File.Create(LogPath).Close();
+ }
+
+ if (File.Exists(LogPath))
+ {
+ var fi = new FileInfo(LogPath);
+ while (fi.Length > 1000000)
+ {
+ var content = File.ReadAllLines(LogPath);
+ File.WriteAllLines(LogPath, content.Skip(10));
+ fi = new FileInfo(LogPath);
+ }
+ }
+ }
+ }
+}
diff --git a/Agent.Installer.Win/ViewModels/MainWindowViewModel.cs b/Agent.Installer.Win/ViewModels/MainWindowViewModel.cs
new file mode 100644
index 00000000..7ccd0f95
--- /dev/null
+++ b/Agent.Installer.Win/ViewModels/MainWindowViewModel.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Serialization.Json;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Remotely.Agent.Installer.Win.ViewModels
+{
+ public class MainWindowViewModel
+ {
+ public InstallerSettings ReadInstallerSettings()
+ {
+ try
+ {
+ var fileBytes = File.ReadAllBytes(Assembly.GetExecutingAssembly().Location);
+ using (var readStream = new MemoryStream(fileBytes))
+ using (var br = new BinaryReader(readStream))
+ {
+ readStream.Seek(-4, SeekOrigin.End);
+ var payloadSize = br.ReadInt32();
+ readStream.Seek(-4 - payloadSize, SeekOrigin.End);
+ var payloadBytes = br.ReadBytes(payloadSize);
+ using (var writeStream = new MemoryStream(payloadBytes))
+ {
+ writeStream.Seek(0, SeekOrigin.Begin);
+ var serializer = new DataContractJsonSerializer(typeof(InstallerSettings));
+ var installerSettings = (InstallerSettings)serializer.ReadObject(writeStream);
+ return installerSettings;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return null;
+ }
+ }
+ }
+}
diff --git a/Agent.Installer.Win/app.manifest b/Agent.Installer.Win/app.manifest
new file mode 100644
index 00000000..78e2df3c
--- /dev/null
+++ b/Agent.Installer.Win/app.manifest
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Agent.Installer.Win/favicon.ico b/Agent.Installer.Win/favicon.ico
new file mode 100644
index 00000000..55aaa8ca
Binary files /dev/null and b/Agent.Installer.Win/favicon.ico differ
diff --git a/Agent.Installer.Win/packages.config b/Agent.Installer.Win/packages.config
new file mode 100644
index 00000000..40999018
--- /dev/null
+++ b/Agent.Installer.Win/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Agent/Program.cs b/Agent/Program.cs
index cf5ab0a2..630c6af6 100644
--- a/Agent/Program.cs
+++ b/Agent/Program.cs
@@ -27,6 +27,12 @@ namespace Remotely.Agent
{
BuildServices();
+ if (Environment.CommandLine.Contains("-uninstall"))
+ {
+ Services.GetRequiredService().UninstallAgent();
+ return;
+ }
+
Task.Run(() => { Init(); });
Thread.Sleep(Timeout.Infinite);
diff --git a/Agent/Services/Uninstaller.cs b/Agent/Services/Uninstaller.cs
index bf4fd8c4..c381d855 100644
--- a/Agent/Services/Uninstaller.cs
+++ b/Agent/Services/Uninstaller.cs
@@ -16,14 +16,11 @@ namespace Remotely.Agent.Services
if (OSUtils.IsWindows)
{
Process.Start("cmd.exe", "/c sc delete Remotely_Service");
- var deleteTime = DateTime.Now.AddMinutes(2).ToString("HH:mm");
var currentDir = AppDomain.CurrentDomain.BaseDirectory;
Process.Start("cmd.exe", $"/c timeout 5 & rd /s /q \"{currentDir}\"");
}
else if (OSUtils.IsLinux)
{
- var users = OSUtils.StartProcessWithResults("users", "");
- var username = users?.Split()?.FirstOrDefault()?.Trim();
Process.Start("sudo", "systemctl stop remotely-agent").WaitForExit();
Directory.Delete("/usr/local/bin/Remotely", true);
File.Delete("/etc/systemd/system/remotely-agent.service");
diff --git a/Desktop.Win/ViewModels/MainWindowViewModel.cs b/Desktop.Win/ViewModels/MainWindowViewModel.cs
index 3b8e2d4a..76139cfc 100644
--- a/Desktop.Win/ViewModels/MainWindowViewModel.cs
+++ b/Desktop.Win/ViewModels/MainWindowViewModel.cs
@@ -105,7 +105,7 @@ namespace Remotely.Desktop.Win.ViewModels
{
try
{
- var commandLine = Win32Interop.GetCommandLine().Trim(" -elevate".ToCharArray()).Trim('"');
+ var commandLine = Win32Interop.GetCommandLine().Replace(" -elevate", "").Replace("\"", "");
var psi = new ProcessStartInfo(commandLine);
psi.Verb = "RunAs";
Process.Start(psi);
diff --git a/Desktop.Win/app.manifest b/Desktop.Win/app.manifest
index 65e0cc7d..c5f817ab 100644
--- a/Desktop.Win/app.manifest
+++ b/Desktop.Win/app.manifest
@@ -28,19 +28,19 @@
and Windows will automatically select the most compatible environment. -->
-
+
-
+
-
+
-
+
-
+
diff --git a/Remotely.sln b/Remotely.sln
index 7190b893..e7a9778d 100644
--- a/Remotely.sln
+++ b/Remotely.sln
@@ -46,6 +46,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScreenCast.Win", "ScreenCas
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Desktop.Win", "Desktop.Win\Desktop.Win.csproj", "{6B726FC4-A907-4813-BF38-3342E02AA8D2}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Agent.Installer.Win", "Agent.Installer.Win\Agent.Installer.Win.csproj", "{A3D0368C-0850-4614-B5B5-41B9D5135AA9}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -152,6 +154,18 @@ Global
{6B726FC4-A907-4813-BF38-3342E02AA8D2}.Release|x64.Build.0 = Release|x64
{6B726FC4-A907-4813-BF38-3342E02AA8D2}.Release|x86.ActiveCfg = Release|x86
{6B726FC4-A907-4813-BF38-3342E02AA8D2}.Release|x86.Build.0 = Release|x86
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x64.Build.0 = Debug|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x86.Build.0 = Debug|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|x64.ActiveCfg = Release|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|x64.Build.0 = Release|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|x86.ActiveCfg = Release|Any CPU
+ {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Shared/Models/InstallerSettings.cs b/Shared/Models/InstallerSettings.cs
new file mode 100644
index 00000000..fbd75121
--- /dev/null
+++ b/Shared/Models/InstallerSettings.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Remotely.Shared.Models
+{
+ [DataContract]
+ public class InstallerSettings
+ {
+ [DataMember]
+ public string OrganizationID { get; set; }
+ }
+}