コード例 #1
0
        static void Main(string[] args)
        {
            ErrorReport error = new ErrorReport();

            KCVKillers shut       = new KCVKillers();
            bool       Existargs  = false;
            var        MainFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);



            try
            {            //
                if (File.Exists(Path.Combine(MainFolder, "ResetUpdaterSettings.cmd")))
                {
                    File.Delete(Path.Combine(MainFolder, "ResetUpdaterSettings.cmd"));
                }
                if (File.Exists(Path.Combine(MainFolder, "KanColleViewer-Horizontal.exe")))
                {
                    File.Delete(Path.Combine(MainFolder, "KanColleViewer-Horizontal.exe"));
                }
                if (File.Exists(Path.Combine(MainFolder, "KanColleViewer-Horizontal.exe.config")))
                {
                    File.Delete(Path.Combine(MainFolder, "KanColleViewer-Horizontal.exe.config"));
                }
                if (File.Exists(Path.Combine(MainFolder, "KanColleViewer-Horizontal.VisualElementsManifest.xml")))
                {
                    File.Delete(Path.Combine(MainFolder, "KanColleViewer-Horizontal.VisualElementsManifest.xml"));
                }
                if (Directory.Exists(Path.Combine(MainFolder, "UpdateBin")))
                {
                    Directory.Delete(Path.Combine(MainFolder, "UpdateBin"), true);
                }
                if (args != null)
                {
                    if (args.Length > 0)
                    {
                        if (args[0] == "renew")
                        {
                            if (Directory.Exists(Path.Combine(MainFolder, "tmp")))
                            {
                                Directory.Delete(Path.Combine(MainFolder, "tmp"), true);
                            }
                            Existargs = true;
                        }
                    }
                }
                UpdaterCore updatercore = new UpdaterCore();


                var up = updatercore.UpperFolder(MainFolder);

                if (!Existargs && File.Exists(Path.Combine(up, "AutoUpdater.exe")))
                {
                    Console.WriteLine("상위폴더에 AutoUpdater.exe가 감지되었습니다. 자가업데이트를 시행합니다.");
                    Deflate.Current.CopyFolder(MainFolder, up, true);
                    shut = new KCVKillers();
                    Process MyProcess = new Process();
                    MyProcess.StartInfo.FileName         = "AutoUpdater.exe";
                    MyProcess.StartInfo.WorkingDirectory = up;
                    MyProcess.StartInfo.Arguments        = "renew";
                    MyProcess.Start();
                    MyProcess.Refresh();
                }
                else
                {
                    Console.Title = "제독업무도 바빠! 자동 업데이트 프로그램";
                    int whileCount = 0;
                    while (!shut.IsKCVDead)
                    {
                        Thread.Sleep(2000);
                        shut.KCV();
                        whileCount++;
                        if (whileCount > 10)
                        {
                            Console.WriteLine("칸코레 뷰어 프로세스가 정상적으로 종료되지않았습니다.");
                            Console.WriteLine("윈도우 작업 관리자를 통해 직접 칸코레 뷰어 프로세스를 종료해주시기 바랍니다.");
                            whileCount = 0;
                        }
                    }


                    if (!Existargs)
                    {
                        updatercore.Core(true, MainFolder, "AutoUpdater.exe");
                    }
                    if (updatercore.UpdateUpdater)
                    {
                        return;
                    }
                    if (File.Exists(Path.Combine(MainFolder, "KanColleViewer.exe")))
                    {
                        updatercore.Core(false, MainFolder, "KanColleViewer.exe");
                    }
                    else                    //파일이 없는경우
                    {
                        Console.WriteLine();
                        Console.WriteLine("제독업무도 바빠!의 실행파일이 없습니다!");
                        Console.WriteLine();
                        Console.Write("최신버전을 새로 다운로드/설치하시겠습니까?(Y/N): ");
                        var t = System.Console.ReadLine();
                        if (t.Length > 0)
                        {
                            if (t.Length > 0 && t[0].ToString() == "y" || t[0].ToString() == "Y" || t[0].ToString() == "ㅛ")
                            {
                                updatercore.Core(false, MainFolder);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                error.catcherror(e, MainFolder);
                Console.WriteLine("에러발생 : ");
                Console.WriteLine(e.Message);
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: CirnoV/KCVAutoUpdater
        static void Main(string[] args)
        {
            ErrorReport error = new ErrorReport();

            var CurrentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
            bool AfterSelfUpdate = false;

            Console.Title = "제독업무도 바빠! 자동 업데이트 프로그램";

            string ProgramVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
            ErrorReport.WriteLine("제독업무도 바빠! 자동 업데이트 프로그램");
            ErrorReport.WriteLine("AutoUpdater Version: " + ProgramVersion);
            ErrorReport.WriteLine("----------------------------------------------");
            ErrorReport.WriteLine();

            // 자가 업데이트를 수행하는 경우, tmp 폴더에 다운로드 후 실행
            // 상위 폴더에 업데이터가 존재하는 경우 본인을 상위 폴더에 복사 후
            // renew 파라메터로 실행, tmp 폴더가 삭제됨
            // 상위 폴더 업데이터 [../AutoUpdater.exe]

            Thread.Sleep(3500);

            // 기존 업데이트중 실패한 파일 혹은 자가 업데이트로 남은 폴더 삭제
            var TempDirectories = new string[]
            {
                UpdaterCore.UpdateDirectory,
                "UpdateBin", "tmp"
            };
            foreach (var Temp in TempDirectories)
            {
                var UpdateTempDirectory = Path.Combine(CurrentDirectory, Temp);
                try
                {
                    if (Directory.Exists(UpdateTempDirectory))
                        Directory.Delete(UpdateTempDirectory, true);
                }
                catch { }
            }

            try
            {
                if (args != null)
                {
                    if (args.Length > 0)
                    {
                        if (args[0] == "renew")
                            AfterSelfUpdate = true;
                    }
                }

                UpdaterCore UpdateCore = new UpdaterCore();
                var upperDirectory = CurrentDirectory;

                try
                { // 상위 폴더가 없을수도 있음
                    for (int i = 0; i < 2; i++)
                    {
                        upperDirectory = UpdateCore.UpperFolder(upperDirectory);
                        if (!AfterSelfUpdate && File.Exists(Path.Combine(upperDirectory, "AutoUpdater.exe")))
                        {
                            ErrorReport.WriteLine("상위폴더에 AutoUpdater.exe가 감지되었습니다. 자가업데이트를 시행합니다.");
                            Deflate.Current.CopyFolder(CurrentDirectory, upperDirectory, false);

                            Process newProcess = new Process();
                            newProcess.StartInfo.FileName = "AutoUpdater.exe";
                            newProcess.StartInfo.WorkingDirectory = upperDirectory;
                            newProcess.StartInfo.Arguments = "renew";
                            newProcess.Start();
                            newProcess.Refresh();
                            return;
                        }
                    }
                }
                catch { }

                ErrorReport.WriteLine("서버로부터 버전 정보를 받는중...");
                ErrorReport.WriteLine();

                UpdateCore.Prepare();

                if (!AfterSelfUpdate) UpdateCore.Update(true, CurrentDirectory, "AutoUpdater.exe");
                if (UpdateCore.UpdaterUpdated) return;

                if (File.Exists(Path.Combine(CurrentDirectory, "KanColleViewer.exe")))
                {
                    UpdateCore.Update(false, CurrentDirectory, "KanColleViewer.exe");
                }
                else // KanColleViewer.exe 파일이 없는경우
                {
                    ErrorReport.WriteLine("제독업무도 바빠!의 실행파일이 없습니다!");
                    ErrorReport.WriteLine();
                    ErrorReport.Write("최신버전을 새로 다운로드/설치하시겠습니까? (y/n): ");
                    ErrorReport.Write("", true);

                    var t = Console.ReadLine();
                    if (t.Length <= 0) return;

                    if ("yYㅛ".Contains(t.Substring(0, 1)))
                        UpdateCore.Update(false, CurrentDirectory);
                }
            }
            catch (Exception e)
            {
                error.catcherror(e, CurrentDirectory);
                ErrorReport.WriteLine("에러발생 : ");
                ErrorReport.WriteLine(e.Message);
            }

            ErrorReport.WriteLine();
            ErrorReport.Write("자동 업데이트를 종료합니다... in ");
            {
                int cursorX = Console.CursorLeft;
                int cursorY = Console.CursorTop;

                for (int i = 2; i >= 0; i--)
                {
                    Console.CursorLeft = cursorX;
                    Console.CursorTop = cursorY;
                    Console.Write("                ");

                    Console.CursorLeft = cursorX;
                    Console.CursorTop = cursorY;
                    ErrorReport.Write(i + " sec", true);

                    Thread.Sleep(1000);
                }
            }
        }