private void InstallService() { Logger.Write("Installing service."); ProgressMessageChanged?.Invoke(this, "Installing Remotely service."); var serv = ServiceController.GetServices().FirstOrDefault(ser => ser.ServiceName == "Remotely_Service"); if (serv == null) { var command = new string[] { "/assemblypath=" + Path.Combine(InstallPath, "Remotely_Agent.exe") }; var context = new InstallContext("", command); var serviceInstaller = new ServiceInstaller() { Context = context, DisplayName = "Remotely Service", 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.", ServiceName = "Remotely_Service", StartType = ServiceStartMode.Automatic, DelayedAutoStart = true, Parent = new ServiceProcessInstaller() }; var state = new System.Collections.Specialized.ListDictionary(); serviceInstaller.Install(state); Logger.Write("Service installed."); serv = ServiceController.GetServices().FirstOrDefault(ser => ser.ServiceName == "Remotely_Service"); ProcessEx.StartHidden("cmd.exe", "/c sc.exe failure \"Remotely_Service\" reset= 5 actions= restart/5000"); } if (serv.Status != ServiceControllerStatus.Running) { serv.Start(); } Logger.Write("Service started."); }
public async Task <bool> Uninstall() { try { if (!CheckIsAdministrator()) { return(false); } StopService(); ProcessEx.StartHidden("cmd.exe", "/c sc delete Remotely_Service").WaitForExit(); await StopProcesses(); ProgressMessageChanged?.Invoke(this, "Deleting files."); ClearInstallDirectory(); ProcessEx.StartHidden("cmd.exe", $"/c timeout 5 & rd /s /q \"{InstallPath}\""); ProcessEx.StartHidden("netsh", "advfirewall firewall delete rule name=\"Remotely Desktop Unattended\"").WaitForExit(); GetRegistryBaseKey().DeleteSubKeyTree(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Remotely", false); return(true); } catch (Exception ex) { Logger.Write(ex); return(false); } }
public async Task ImportTracks(IEnumerable <FileInfo> files, UserPlaylist playlist) { if (_isEnabled) { throw new InvalidOperationException("The TrackImporter is already running"); } _isEnabled = true; var extensions = _musicDataManager.MusicManager.AudioEngine.SupportedExtensions; var filesToImport = files.Where(fileInfo => fileInfo.Exists && !string.IsNullOrEmpty(fileInfo.Extension)).ToList(); var allFilesCount = (double)filesToImport.Count; for (int i = 0; i < filesToImport.Count; i++) { var fileInfo = filesToImport[i]; ProgressMessageChanged?.Invoke(this, $"\"{fileInfo.Name}\""); ProgressChanged?.Invoke(this, i / allFilesCount); var track = await GetTrack(fileInfo, extensions); if (track != null && playlist != null && !playlist.Tracks.Contains(track)) { playlist.AddTrack(track); } if (_cancel) { break; } } Finished?.Invoke(this, EventArgs.Empty); _isEnabled = false; _cancel = false; }
private async Task StopProcesses() { ProgressMessageChanged?.Invoke(this, "Stopping Remotely processes."); var procs = Process.GetProcessesByName("Remotely_Agent").Concat(Process.GetProcessesByName("Remotely_Desktop")); foreach (var proc in procs) { proc.Kill(); } await Task.Delay(500); }
private void BackupDirectory() { if (Directory.Exists(InstallPath)) { Logger.Write("Backing up current installation."); ProgressMessageChanged?.Invoke(this, "Backing up current installation."); var backupPath = Path.Combine(Path.GetTempPath(), "Remotely_Backup.zip"); if (FileIO.Exists(backupPath)) { FileIO.Delete(backupPath); } ZipFile.CreateFromDirectory(InstallPath, backupPath, CompressionLevel.Fastest, false); } }
private async Task InstallDesktpRuntimeIfNeeded() { Logger.Write("Checking for .NET Core runtime."); var uninstallKeys = new List <RegistryKey>(); var runtimeInstalled = false; foreach (var subkeyName in GetRegistryBaseKey().OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", false).GetSubKeyNames()) { var subkey = GetRegistryBaseKey().OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + subkeyName, false); if (subkey?.GetValue("DisplayName")?.ToString()?.Contains($"Microsoft Windows Desktop Runtime - {CoreRuntimeVersion}") == true) { runtimeInstalled = true; break; } } if (!runtimeInstalled) { Logger.Write("Downloading .NET Core runtime."); ProgressMessageChanged.Invoke(this, "Downloading the .NET Core runtime."); var client = new WebClient(); client.DownloadProgressChanged += (sender, args) => { ProgressValueChanged?.Invoke(this, args.ProgressPercentage); }; var downloadUrl = string.Empty; if (Environment.Is64BitOperatingSystem) { downloadUrl = "https://download.visualstudio.microsoft.com/download/pr/3240250e-6fe0-4258-af69-85abef6c00de/e01ee0af6c65d894f4a02bdf6705ec7b/windowsdesktop-runtime-3.1.2-win-x64.exe"; } else { downloadUrl = "https://download.visualstudio.microsoft.com/download/pr/b824906f-bd6e-4067-86a6-95c61620674d/cfcdab84a01cee94fdaa31271c3d4d47/windowsdesktop-runtime-3.1.2-win-x86.exe"; } var targetFile = Path.Combine(Path.GetTempPath(), "windowsdesktop-runtime.exe"); await client.DownloadFileTaskAsync(downloadUrl, targetFile); Logger.Write("Installing .NET Core runtime."); ProgressMessageChanged?.Invoke(this, "Installing the .NET Core runtime."); ProgressValueChanged?.Invoke(this, 0); await Task.Run(() => { ProcessEx.StartHidden(targetFile, "/install /quiet /norestart").WaitForExit(); }); } else { Logger.Write(".NET Core runtime already installed."); } }
private async Task InstallDesktpRuntimeIfNeeded() { Logger.Write("Checking for .NET Core runtime."); var uninstallKeys = new List <RegistryKey>(); var runtimeInstalled = false; foreach (var subkeyName in GetRegistryBaseKey().OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", false).GetSubKeyNames()) { var subkey = GetRegistryBaseKey().OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + subkeyName, false); if (subkey?.GetValue("DisplayName")?.ToString()?.Contains($"Microsoft Windows Desktop Runtime - {CoreRuntimeVersion}") == true) { runtimeInstalled = true; break; } } if (!runtimeInstalled) { Logger.Write("Downloading .NET Core runtime."); ProgressMessageChanged.Invoke(this, "Downloading the .NET Core runtime."); var client = new WebClient(); client.DownloadProgressChanged += (sender, args) => { ProgressValueChanged?.Invoke(this, args.ProgressPercentage); }; var downloadUrl = string.Empty; if (Environment.Is64BitOperatingSystem) { downloadUrl = "https://download.visualstudio.microsoft.com/download/pr/5954c748-86a1-4823-9e7d-d35f6039317a/169e82cbf6fdeb678c5558c5d0a83834/windowsdesktop-runtime-3.1.3-win-x64.exe"; } else { downloadUrl = "https://download.visualstudio.microsoft.com/download/pr/7cd5c874-5d11-4e72-81f0-4a005d956708/0eb310169770c893407169fc3abaac4f/windowsdesktop-runtime-3.1.3-win-x86.exe"; } var targetFile = Path.Combine(Path.GetTempPath(), "windowsdesktop-runtime.exe"); await client.DownloadFileTaskAsync(downloadUrl, targetFile); Logger.Write("Installing .NET Core runtime."); ProgressMessageChanged?.Invoke(this, "Installing the .NET Core runtime."); ProgressValueChanged?.Invoke(this, 0); await Task.Run(() => { ProcessEx.StartHidden(targetFile, "/install /quiet /norestart").WaitForExit(); }); } else { Logger.Write(".NET Core runtime already installed."); } }
private void StopService() { try { var remotelyService = ServiceController.GetServices().FirstOrDefault(x => x.ServiceName == "Remotely_Service"); if (remotelyService != null) { Logger.Write("Stopping existing Remotely service."); ProgressMessageChanged?.Invoke(this, "Stopping existing Remotely service."); remotelyService.Stop(); remotelyService.WaitForStatus(ServiceControllerStatus.Stopped); } } catch (Exception ex) { Logger.Write(ex); } }
private async Task DownloadRemotelyAgent(string serverUrl) { var targetFile = Path.Combine(Path.GetTempPath(), $"Remotely-Agent.zip"); if (CommandLineParser.CommandLineArgs.TryGetValue("path", out var result) && FileIO.Exists(result)) { targetFile = result; } else { ProgressMessageChanged.Invoke(this, "Downloading Remotely agent."); using (var client = new WebClient()) { client.DownloadProgressChanged += (sender, args) => { ProgressValueChanged?.Invoke(this, args.ProgressPercentage); }; await client.DownloadFileTaskAsync($"{serverUrl}/Content/Remotely-Win10-{Platform}.zip", targetFile); } } ProgressMessageChanged.Invoke(this, "Extracting Remotely files."); ProgressValueChanged?.Invoke(this, 0); var tempDir = Path.Combine(Path.GetTempPath(), "RemotelyUpdate"); if (Directory.Exists(tempDir)) { Directory.Delete(tempDir, true); } Directory.CreateDirectory(InstallPath); while (!Directory.Exists(InstallPath)) { await Task.Delay(10); } var wr = WebRequest.CreateHttp($"{serverUrl}/Content/Remotely-Win10-{Platform}.zip"); wr.Method = "Head"; using (var response = (HttpWebResponse)await wr.GetResponseAsync()) { FileIO.WriteAllText(Path.Combine(InstallPath, "etag.txt"), response.Headers["ETag"]); } ZipFile.ExtractToDirectory(targetFile, tempDir); var fileSystemEntries = Directory.GetFileSystemEntries(tempDir); for (var i = 0; i < fileSystemEntries.Length; i++) { try { ProgressValueChanged?.Invoke(this, (int)((double)i / (double)fileSystemEntries.Length * 100d)); var entry = fileSystemEntries[i]; if (FileIO.Exists(entry)) { FileIO.Copy(entry, Path.Combine(InstallPath, Path.GetFileName(entry)), true); } else if (Directory.Exists(entry)) { FileSystem.CopyDirectory(entry, Path.Combine(InstallPath, new DirectoryInfo(entry).Name), true); } await Task.Delay(1); } catch (Exception ex) { Logger.Write(ex); } } ProgressValueChanged?.Invoke(this, 0); }
private async Task DownloadRemotelyAgent(string serverUrl) { var targetFile = Path.Combine(Path.GetTempPath(), $"Remotely-Agent.zip"); if (CommandLineParser.CommandLineArgs.TryGetValue("path", out var result)) { File.Copy(result, targetFile, true); } else { ProgressMessageChanged.Invoke(this, "Downloading Remotely agent."); var client = new WebClient(); client.DownloadProgressChanged += (sender, args) => { ProgressValueChanged?.Invoke(this, args.ProgressPercentage); }; await client.DownloadFileTaskAsync($"{serverUrl}/Downloads/Remotely-Win10-{Platform}.zip", targetFile); } ProgressMessageChanged.Invoke(this, "Extracting Remotely files."); ProgressValueChanged?.Invoke(this, 0); var tempDir = Path.Combine(Path.GetTempPath(), "RemotelyUpdate"); if (Directory.Exists(tempDir)) { Directory.Delete(tempDir, true); } Directory.CreateDirectory(InstallPath); while (!Directory.Exists(InstallPath)) { await Task.Delay(10); } ZipFile.ExtractToDirectory(targetFile, tempDir); var fileSystemEntries = Directory.GetFileSystemEntries(tempDir); for (var i = 0; i < fileSystemEntries.Length; i++) { try { ProgressValueChanged?.Invoke(this, (int)((double)i / (double)fileSystemEntries.Length * 100d)); var entry = fileSystemEntries[i]; if (File.Exists(entry)) { File.Copy(entry, Path.Combine(InstallPath, Path.GetFileName(entry)), true); } else if (Directory.Exists(entry)) { Directory.Move(entry, Path.Combine(InstallPath, new DirectoryInfo(entry).Name)); } await Task.Delay(1); } catch (Exception ex) { Logger.Write(ex); } } ProgressValueChanged?.Invoke(this, 0); }
protected void UpdateProgressMessage(string message) { ProgressMessageChanged?.Invoke(this, message); }