using System; using System.IO; using System.Security.Cryptography; using System.Windows.Forms; using System.Reflection; namespace LiveHelper2 { public partial class Form1 : Form { private static readonly string SOURCE_PATH = "services.json"; private static readonly string REPAIR_PATH = Path.Combine(Application.StartupPath, "repair.json"); private string DEST_PATH = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "obs-studio", "plugin_config", "rtmp-services", "services.json" ); private static readonly string BACKUP_PATH = @"C:\obs_backup\services.json"; public Form1() { InitializeComponent(); if (string.IsNullOrWhiteSpace(txtInstallPath.Text)) { txtInstallPath.Text = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "obs-studio", "plugin_config", "rtmp-services", "services.json" ); } // アセンブリのバージョン情報を取得 Version version = Assembly.GetExecutingAssembly().GetName().Version; // ラベルにバージョン情報を設定 lblVersion.Text = $"Version: {version.Major}.{version.Minor}.{version.Build}"; // 設定からインストール先のパスを読み込み、テキストボックスに表示 if (!string.IsNullOrEmpty(Properties.Settings.Default.InstallPath)) { DEST_PATH = Properties.Settings.Default.InstallPath; txtInstallPath.Text = DEST_PATH; } } private string ComputeFileHash(string filePath) { using (var sha256 = SHA256.Create()) using (var stream = File.OpenRead(filePath)) { return Convert.ToBase64String(sha256.ComputeHash(stream)); } } private void btnInstall_Click(object sender, EventArgs e) { try { if (File.Exists(SOURCE_PATH)) { if (!File.Exists(DEST_PATH) || ComputeFileHash(SOURCE_PATH) != ComputeFileHash(DEST_PATH)) { if (File.Exists(DEST_PATH)) { Directory.CreateDirectory(Path.GetDirectoryName(BACKUP_PATH)); File.Copy(DEST_PATH, BACKUP_PATH, true); } File.Copy(SOURCE_PATH, DEST_PATH, true); MessageBox.Show("インストールが完了しました! (Installation completed!)"); } else { MessageBox.Show("コピー先のファイルがソースと同じです。インストールを中止しました。 (The destination file is the same as the source file. Installation aborted.)"); } } else { MessageBox.Show($"ソースファイル {SOURCE_PATH} が見つかりませんでした! (Source file {SOURCE_PATH} not found!)"); } } catch (Exception ex) { MessageBox.Show($"エラーが発生しました: {ex.Message} (An error occurred: {ex.Message})"); } } private void btnUninstall_Click(object sender, EventArgs e) { try { if (File.Exists(BACKUP_PATH)) { if (!File.Exists(DEST_PATH) || ComputeFileHash(BACKUP_PATH) != ComputeFileHash(DEST_PATH)) { // バックアップをコピーして元に戻す File.Copy(BACKUP_PATH, DEST_PATH, true); // バックアップフォルダを削除 Directory.Delete(Path.GetDirectoryName(BACKUP_PATH), true); MessageBox.Show("アンインストールが完了しました! (Uninstallation completed!)"); } else { MessageBox.Show("コピー先のファイルがバックアップと同じです。アンインストールを中止しました。 (The destination file is the same as the backup file. Uninstallation aborted.)"); } } else { MessageBox.Show("バックアップファイルが見つかりませんでした!アンインストールを中止しました。 (Backup file not found! Uninstall aborted.)"); } } catch (Exception ex) { MessageBox.Show($"エラーが発生しました: {ex.Message} (An error occurred: {ex.Message})"); } } private void btnChooseDestination_Click(object sender, EventArgs e) { using (var folderBrowser = new FolderBrowserDialog()) { DialogResult result = folderBrowser.ShowDialog(); if (result == DialogResult.OK) { DEST_PATH = Path.Combine(folderBrowser.SelectedPath, "services.json"); // テキストボックスに新しいインストール先のパスを表示 txtInstallPath.Text = DEST_PATH; MessageBox.Show($"インストール先を {DEST_PATH} に設定しました。(Destination set to {DEST_PATH})"); // 設定にインストール先のパスを保存 Properties.Settings.Default.InstallPath = DEST_PATH; Properties.Settings.Default.Save(); } } } private void btnOpenFolder_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtInstallPath.Text) && Directory.Exists(Path.GetDirectoryName(txtInstallPath.Text))) { System.Diagnostics.Process.Start("explorer.exe", Path.GetDirectoryName(txtInstallPath.Text)); } else { MessageBox.Show("設定されているフォルダが存在しないか、正しくありません。 (The configured folder does not exist or is not correct.)"); } } private void btnRepair_Click(object sender, EventArgs e) { try { if (File.Exists(REPAIR_PATH)) { string destFolder = Path.GetDirectoryName(txtInstallPath.Text); string destPath = Path.Combine(destFolder, "services.json"); if (!Directory.Exists(destFolder)) { Directory.CreateDirectory(destFolder); } File.Copy(REPAIR_PATH, destPath, true); MessageBox.Show("修正ファイルがコピーされました! (Repair file has been copied!)"); } else { MessageBox.Show($"修正ファイル {REPAIR_PATH} が見つかりませんでした! (Repair file {REPAIR_PATH} not found!)"); } } catch (Exception ex) { MessageBox.Show($"エラーが発生しました: {ex.Message} (An error occurred: {ex.Message})"); } } } }