/// <summary> /// Patchを作成するときのコード /// 実行ファイル配下にある2つのフォルダを対象として、その差分を生成する。 /// </summary> private void MakePatch() { // 例) V100とV108との差分を生成する。 //PatchMaker.MakePatch("V100", "V108"); //PatchMaker.MakePatch("V108", "V108a"); PatchMaker.MakePatch(PatchSource1, PatchSource2); Console.WriteLine("patch done"); }
private void worker() { var model = ViewModel; Invoke(new Action(() => { richTextBox2.Text += $"\r\nCopy \"{ViewModel.SourceFolder}\" to \"{ViewModel.InstallFolder}\""; })); PatchMaker.FolderCopy(ViewModel.SourceFolder, ViewModel.InstallFolder, ViewModel.UpdateTextFile /*このファイル除外*/, (filename) => { OutputProgressMessage(filename); }); Invoke(new Action(() => { button1.Enabled = true; })); }
/// <summary> /// インストール開始 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { var targetFolder = textBox1.Text; var myShogiPath = Path.Combine(targetFolder, "myshogi.exe"); if (!File.Exists(myShogiPath)) { MessageBox.Show($"選択されたインストール先にmyshogi.exeがありません。\r\nこのフォルダには、{ViewModel.ProductName}がインストールされていません。"); return; } // インストール先のフォルダは、このtargetFolderに変更。 ViewModel.InstallFolder = targetFolder; // インストール開始 // 権限昇格しないといけない…。 try { button1.Enabled = false; // 管理者として実行されているのか? var isAdmin = PatchMaker.IsAdministrator(); // AutoInstallが予約されている。 if (ViewModel.AutoInstall) { if (isAdmin) { workerThread = new Thread(worker); workerThread.Start(); } else { //「ユーザーアカウント制御」ダイアログでキャンセルされたなどによって起動できなかった時 MessageBox.Show("管理者になれませんでした。UACの設定を確認してください。"); } } else if (isAdmin) { // このまま実行できる。 workerThread = new Thread(worker); workerThread.Start(); } else { //管理者として自分自身を起動する var psi = new System.Diagnostics.ProcessStartInfo(); psi.UseShellExecute = true; psi.FileName = Application.ExecutablePath; psi.Verb = "runas"; // 管理者 psi.Arguments = $"FolderCopy \"{targetFolder}\""; // このコマンドを実行してもらう。 try { //起動する var process = System.Diagnostics.Process.Start(psi); Application.Exit(); // このプロセスは終了させる。 } catch (System.ComponentModel.Win32Exception ex) { //「ユーザーアカウント制御」ダイアログでキャンセルされたなどによって起動できなかった時 MessageBox.Show("起動しませんでした: " + ex.Message); } } //PatchMaker.FolderCopy(ViewModel.SourceFolder, targetFolder); } catch (Exception ex) { MessageBox.Show("例外が発生しました。\r\n" + ex.Message); } finally { button1.Enabled = true; } }