Example #1
0
        /// <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");
        }
Example #2
0
        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; }));
        }
Example #3
0
        /// <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;
            }
        }