Пример #1
0
        static int BuildWin32(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
                new ConsoleParam("[yes|no]",     ConsoleService.Prompt, "Increments build number (y/n) ? ", ConsoleService.EvalNotEmpty, null),
                new ConsoleParam("NORMALIZESRC", ConsoleService.Prompt, "Normalizes source codes (y/n) ? ", ConsoleService.EvalNotEmpty, null)
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            if (vl.DefaultParam.BoolValue)
            {
                Win32BuildUtil.IncrementBuildNumber();
            }
            if (vl.DefaultParam.BoolValue || vl["NORMALIZESRC"].BoolValue)
            {
                Win32BuildUtil.NormalizeBuildInfo();
            }

            Paths.DeleteAllReleaseTarGz();
            Paths.DeleteAllReleaseExe();
            Paths.DeleteAllReleaseManuals();
            Paths.DeleteAllReleaseAdminKits();

            Win32BuildUtil.BuildMain();
            Win32BuildUtil.SignAllBinaryFiles();
            HamCoreBuildUtil.BuildHamcore();
            Win32BuildUtil.CopyDebugSnapshot();

            return(0);
        }
Пример #2
0
        // Build
        public static void BuildMain(BuildSoftware soft, bool debugModeIfUnix)
        {
            int      version, build;
            string   name;
            DateTime date;

            string title = Console.Title;

            Console.Title = string.Format("Building {0}", soft.IDString);

            try
            {
                Win32BuildUtil.ReadBuildInfoFromTextFile(out build, out version, out name, out date);

                soft.SetBuildNumberVersionName(build, version, name, date);

                Con.WriteLine("Building '{0}' - {1}...", soft.IDString, soft.TitleString);

                BuildSoftwareUnix softUnix = soft as BuildSoftwareUnix;

                if (softUnix == null)
                {
                    soft.Build();
                }
                else
                {
                    softUnix.Build(debugModeIfUnix);
                }
            }
            finally
            {
                Console.Title = title;
            }
        }
        // Build by cross-compiler
        public virtual void BuildWithCrossCompiler(string baseOutputDir)
        {
            // Create a batch file
            string outDir    = Path.Combine(baseOutputDir, this.CrossLibName);
            string outSrcDir = Path.Combine(outDir, "src");

            try
            {
                string xcDir = Path.Combine(Path.Combine(Paths.CrossCompilerBaseDir, this.CrossCompilerName), "bin");

                if (Directory.Exists(xcDir) == false)
                {
                    throw new ApplicationException(string.Format("dir '{0}' not found.", xcDir));
                }

                string       batFileName = Path.Combine(outSrcDir, "cross_build.cmd");
                StreamWriter w           = new StreamWriter(batFileName, false, Str.ShiftJisEncoding);
                w.WriteLine("SET PATH={0};%PATH%", xcDir);
                w.WriteLine();
                w.WriteLine(outSrcDir.Substring(0, 2));
                w.WriteLine("CD {0}", outSrcDir);
                w.WriteLine();
                w.WriteLine("make clean");
                w.WriteLine("make");
                w.WriteLine();
                w.WriteLine("EXIT /B %ERRORLEVEL%");
                w.Close();

                Semaphore sem = new Semaphore(BuildConfig.NumMultipleCompileTasks, BuildConfig.NumMultipleCompileTasks, "vpn_build_cross");
                Con.WriteLine("Waiting for Semaphore...");
                sem.WaitOne();
                Con.WriteLine("Done.");
                try
                {
                    Win32BuildUtil.ExecCommand(Paths.CmdFileName, string.Format("/C \"{0}\"", batFileName));
                }
                finally
                {
                    sem.Release();
                }
            }
            catch
            {
                string[] files = Directory.GetFiles(Path.Combine(outSrcDir, "code"), "*.a", SearchOption.AllDirectories);
                foreach (string file in files)
                {
                    try
                    {
                        File.Delete(file);
                    }
                    catch
                    {
                    }
                }
            }
        }
Пример #4
0
        static int SignAll(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            Win32BuildUtil.SignAllBinaryFiles();

            return(0);
        }
Пример #5
0
        static int IncrementBuildNumber(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            Win32BuildUtil.IncrementBuildNumber();

            return(0);
        }
Пример #6
0
        static int All(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
#if !BU_SOFTETHER
                new ConsoleParam("[yes|no]",     ConsoleService.Prompt, "Increments build number (y/n) ? ",                                    ConsoleService.EvalNotEmpty, null),
                new ConsoleParam("SEVPN",        ConsoleService.Prompt, "Build SoftEther VPN automatically after PacketiX VPN Build (y/n) ? ", ConsoleService.EvalNotEmpty, null),
#else
                new ConsoleParam("[yes|no]"),
#endif
                new ConsoleParam("IGNOREERROR"),
                new     ConsoleParam("DEBUG"),
                new ConsoleParam("SERIAL"),
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            DateTime start = Time.NowDateTime;

            Win32BuildUtil.ExecCommand(Env.ExeFileName, string.Format("/CMD:BuildWin32 {0} /NORMALIZESRC:{1}",
                                                                      vl["[yes|no]"].BoolValue ? "yes" : "no",
                                                                      "yes"));

            Win32BuildUtil.ExecCommand(Env.ExeFileName, string.Format("/CMD:ReleaseWin32 all /IGNOREERROR:{0} /SERIAL:{1}",
                                                                      vl["IGNOREERROR"].BoolValue ? "yes" : "no",
                                                                      vl["SERIAL"].BoolValue ? "yes" : "no"));

#if !BU_OSS
            Win32BuildUtil.ExecCommand(Env.ExeFileName, string.Format("/CMD:ReleaseUnix all /IGNOREERROR:{0} /DEBUG:{1} /SERIAL:{2}",
                                                                      vl["IGNOREERROR"].BoolValue ? "yes" : "no",
                                                                      vl["DEBUG"].BoolValue ? "yes" : "no",
                                                                      vl["SERIAL"].BoolValue ? "yes" : "no"));
#endif

            Win32BuildUtil.ExecCommand(Env.ExeFileName, string.Format("/CMD:CopyRelease"));

#if !BU_SOFTETHER
            Win32BuildUtil.ExecCommand(Env.ExeFileName, string.Format("/CMD:MakeOpenSource"));

            Win32BuildUtil.ExecCommand(Env.ExeFileName, string.Format("/CMD:MakeSoftEtherDir"));

            if (vl["SEVPN"].BoolValue)
            {
                // Build SEVPN
                Win32BuildUtil.ExecCommand(Paths.CmdFileName, string.Format("/C \"{0}\"", Path.Combine(Paths.SoftEtherBuildDir, @"Main\BuildAll.cmd")));
            }
#endif

            DateTime end = Time.NowDateTime;

            Con.WriteLine("Taken time: {0}.", (end - start));

            return(0);
        }
Пример #7
0
        static int SignSeLowInfFiles(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
                new ConsoleParam("[cpu]", ConsoleService.Prompt, "x86 / x64: ", ConsoleService.EvalNotEmpty, null)
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

#if     !BU_OSS
            Win32BuildUtil.SignSeLowInfFiles(vl.DefaultParam.StrValue);
#endif

            return(0);
        }
Пример #8
0
        static int GenerateVersionResource(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
                new ConsoleParam("[targetFileName]", ConsoleService.Prompt, "Target Filename: ", ConsoleService.EvalNotEmpty, null),
                new ConsoleParam("OUT",              ConsoleService.Prompt, "Dst Filename: ",    ConsoleService.EvalNotEmpty, null),
                new ConsoleParam("RC"),
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            string targetFilename = vl.DefaultParam.StrValue;
            string outFilename    = vl["OUT"].StrValue;

            Win32BuildUtil.GenerateVersionInfoResource(targetFilename, outFilename, vl["RC"].StrValue);

            return(0);
        }
Пример #9
0
        static int GenerateVpnWebOcxCab(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
                new ConsoleParam("[src]", ConsoleService.Prompt, "Src Filename: ", ConsoleService.EvalNotEmpty, null),
                new ConsoleParam("DEST",  ConsoleService.Prompt, "Dst Filename: ", ConsoleService.EvalNotEmpty, null),
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

#if     !BU_OSS
            string destFileName = vl["DEST"].StrValue;
            string srcFileName  = vl.DefaultParam.StrValue;

            Win32BuildUtil.GenerateVpnWebOcxCab(destFileName, srcFileName);
#endif

            return(0);
        }
Пример #10
0
        // Build the installer
        void buildInstaller()
        {
            string outFileName = Path.Combine(Paths.ReleaseDir, this.OutputFileName);

            string vpnsetup_exe = Path.Combine(Paths.BinDirName, "vpnsetup.exe");

            try
            {
                File.Delete(outFileName);
            }
            catch
            {
            }

            Win32BuildUtil.ExecCommand(vpnsetup_exe, string.Format("/SFXMODE:{1} /SFXOUT:\"{0}\"",
                                                                   outFileName, Software.ToString()));

            CodeSign.SignFile(outFileName, outFileName, "VPN Software", false);
        }
Пример #11
0
        // Generate vpnweb.ocx
        public static void GenerateVpnWebOcxCab(string dstFileName, string ocxFileName)
        {
            int      build, version;
            string   name;
            DateTime date;

            ReadBuildInfoFromTextFile(out build, out version, out name, out date);

            string cabVer      = string.Format("{0},{1},0,{2}", version / 100, version % 100, build);
            string cabFileName = IO.CreateTempFileNameByExt(".cab");
            Mutex  m           = new Mutex(false, "cabtmp_mutex");

            m.WaitOne();

            try
            {
                // Building the cab
                string cabTmpDir = Path.Combine(Paths.TmpDirName, "cabtmp");

                IO.MakeDir(cabTmpDir);
                IO.DeleteFilesAndSubDirsInDir(cabTmpDir);

                File.Copy(Path.Combine(Paths.BinDirName, ocxFileName), Path.Combine(cabTmpDir, "vpnweb.ocx"));

                string infText = File.ReadAllText(Path.Combine(Path.Combine(Paths.BaseDirName, @"BuildFiles\OcxCabInf"), "vpnweb.inf"));
                infText = Str.ReplaceStr(infText, "$CAB_VERSION$", cabVer);
                File.WriteAllText(Path.Combine(cabTmpDir, "vpnweb.inf"), infText);

                Win32BuildUtil.ExecCommand(Path.Combine(Paths.BaseDirName, @"BuildFiles\Utility\cabarc.exe"),
                                           string.Format(@"-s 6144 n {0}\vpnweb.cab {0}\vpnweb.ocx {0}\vpnweb.inf", cabTmpDir));

                File.Copy(Path.Combine(cabTmpDir, "vpnweb.cab"), cabFileName, true);
            }
            finally
            {
                m.ReleaseMutex();
            }

            CodeSign.SignFile(cabFileName, cabFileName, "VPN Software", false);

            File.Copy(cabFileName, dstFileName, true);
        }
Пример #12
0
 public static void Test()
 {
     Win32BuildUtil.MakeDriverPackage();
 }
Пример #13
0
        public static void SetManifest(string exe, string manifestName)
        {
            Mutex x = new Mutex(false, MutexName);

            x.WaitOne();

            try
            {
                // Manifest file name
                string filename = Path.Combine(Paths.ManifestsDir, manifestName);
                if (File.Exists(filename) == false)
                {
                    throw new FileNotFoundException(filename);
                }

                FileInfo fi = new FileInfo(exe);

                // Copy exe file to a temporary directory
                string exeTmp = IO.CreateTempFileNameByExt(".exe");
                IO.FileCopy(exe, exeTmp);

                // Create a batch file
                string       batFileName = Path.Combine(Paths.TmpDirName, "exec_mt.cmd");
                StreamWriter bat         = new StreamWriter(batFileName, false, Str.ShiftJisEncoding);
                bat.WriteLine("call \"{0}\"", Paths.VisualStudioVCBatchFileName);
                bat.WriteLine("echo on");
                bat.WriteLine("mt.exe -manifest \"{0}\" -outputresource:\"{1}\";1", filename, exeTmp);
                bat.WriteLine("EXIT /B %ERRORLEVEL%");
                bat.Close();

                Exception ex = null;

                int i;
                // Repeated 20 times in order to avoid locking the file by the anti-virus software
                for (i = 0; i < 20; i++)
                {
                    try
                    {
                        // Execute
                        Win32BuildUtil.ExecCommand(Paths.CmdFileName, string.Format("/C \"{0}\"", batFileName), true);
                        ex = null;

                        break;
                    }
                    catch (Exception ex2)
                    {
                        ex = ex2;
                    }

                    ThreadObj.Sleep(Secure.Rand31i() % 50);
                }

                if (ex != null)
                {
                    throw new ApplicationException("mt.exe Manifest Processing for '" + exe + "' Failed.");
                }

                // Revert to the original file
                IO.FileCopy(exeTmp, exe);

                // Restore the date and time
                File.SetCreationTime(exe, fi.CreationTime);
                File.SetLastAccessTime(exe, fi.LastAccessTime);
                File.SetLastWriteTime(exe, fi.LastWriteTime);
            }
            finally
            {
                x.ReleaseMutex();
            }
        }
Пример #14
0
        static int ReleaseWin32(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
                new ConsoleParam("[id]"),
                new ConsoleParam("IGNOREERROR"),
                new ConsoleParam("SERIAL"),
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            bool     serial = vl["SERIAL"].BoolValue;
            int      version, build;
            string   name;
            DateTime date;

            Win32BuildUtil.ReadBuildInfoFromTextFile(out build, out version, out name, out date);
            BuildSoftware[] softs = BuildSoftwareList.List;

            if (Str.IsEmptyStr(vl.DefaultParam.StrValue))
            {
                Con.WriteLine("IDs:");
                foreach (BuildSoftware soft in softs)
                {
                    if (soft.Os.IsWindows)
                    {
                        soft.SetBuildNumberVersionName(build, version, name, date);
                        Con.WriteLine("  {0}", soft.IDString);
                        Con.WriteLine("    - \"{0}\"", soft.OutputFileName);
                    }
                }
            }
            else
            {
                string key = vl.DefaultParam.StrValue;
                bool   all = false;

                if ("all".StartsWith(key, StringComparison.InvariantCultureIgnoreCase))
                {
                    all = true;
                }

                if ("clean".StartsWith(key, StringComparison.InvariantCultureIgnoreCase))
                {
                    // Delete the release directory
                    Paths.DeleteAllReleaseExe();
                    Con.WriteLine("Clean completed.");
                    return(0);
                }

                List <BuildSoftware> o = new List <BuildSoftware>();

                foreach (BuildSoftware soft in softs)
                {
                    soft.SetBuildNumberVersionName(build, version, name, date);

                    if (soft.Os.IsWindows)
                    {
                        if (all || soft.IDString.IndexOf(key, StringComparison.InvariantCultureIgnoreCase) != -1)
                        {
                            o.Add(soft);
                        }
                    }
                }

                if (o.Count == 0)
                {
                    throw new ApplicationException(string.Format("Software ID '{0}' not found.", key));
                }
                else
                {
                    if (all)
                    {
                        // Delete the release directory
                        Paths.DeleteAllReleaseExe();
                    }
                    else
                    {
                        IO.MakeDir(Paths.ReleaseDir);
                    }

                    if (serial)
                    {
                        // Build in series
                        int i;
                        for (i = 0; i < o.Count; i++)
                        {
                            Con.WriteLine("{0} / {1}: Executing for '{2}'...",
                                          i + 1, o.Count, o[i].IDString);

                            BuildHelper.BuildMain(o[i], false);
                        }
                    }
                    else if (o.Count == 1)
                    {
                        // To build
                        BuildHelper.BuildMain(o[0], false);
                    }
                    else
                    {
                        // Make a child process build
                        Process[] procs = new Process[o.Count];

                        int i;

                        for (i = 0; i < o.Count; i++)
                        {
                            Con.WriteLine("{0} / {1}: Executing for '{2}'...",
                                          i + 1, o.Count, o[i].IDString);

                            procs[i] = Kernel.Run(Env.ExeFileName,
                                                  string.Format("/PAUSEIFERROR:{1} /CMD:ReleaseWin32 {0}",
                                                                o[i].IDString, vl["IGNOREERROR"].BoolValue ? "no" : "yes"));
                        }

                        Con.WriteLine("Waiting child processes...");

                        int numError = 0;

                        for (i = 0; i < o.Count; i++)
                        {
                            procs[i].WaitForExit();

                            bool ok = procs[i].ExitCode == 0;

                            if (ok == false)
                            {
                                numError++;
                            }

                            Con.WriteLine("{0} / {1} ({2}):", i + 1, o.Count, o[i].IDString);
                            Con.WriteLine("       {0}", ok ? "Success" : "* Error *");
                        }

                        Con.WriteLine();
                        if (numError != 0)
                        {
                            throw new ApplicationException(string.Format("{0} Errors.", numError));
                        }
                        Con.WriteLine("No Errors.");
                    }
                }
            }

            return(0);
        }
Пример #15
0
        static int CopyRelease(ConsoleService c, string cmdName, string str)
        {
            ConsoleParam[] args =
            {
            };
            ConsoleParamValueList vl = c.ParseCommandList(cmdName, str, args);

            int      build, version;
            string   name;
            DateTime date;

            Win32BuildUtil.ReadBuildInfoFromTextFile(out build, out version, out name, out date);

            string baseName = string.Format("v{0}-{1}-{2}-{3:D4}.{4:D2}.{5:D2}",
                                            BuildHelper.VersionIntToString(version),
                                            build,
                                            name,
                                            date.Year, date.Month, date.Day);

#if !BU_OSS
            string destDirName = Path.Combine(Paths.ReleaseDestDir,
                                              string.Format(@"{0}-{1}-{2}-{3}",
                                                            Str.DateToStrShort(BuildSoftwareList.ListCreatedDateTime),
                                                            baseName,
                                                            Env.MachineName, Env.UserName));
#else   // !BU_OSS
            string destDirName = Path.Combine(Paths.ReleaseDestDir,
                                              string.Format(@"{1}",
                                                            Str.DateToStrShort(BuildSoftwareList.ListCreatedDateTime),
                                                            baseName,
                                                            Env.MachineName, Env.UserName));
#endif

#if !BU_OSS
            string publicDir = Path.Combine(destDirName, "Public");
#else   // !BU_OSS
            string publicDir = destDirName;
#endif

#if !BU_OSS
            string filesReleaseDir = Path.Combine(publicDir, baseName);
#else   // !BU_OSS
            string filesReleaseDir = publicDir;
#endif

            string autorunReleaseSrcDir = Path.Combine(publicDir, "autorun");

            IO.CopyDir(Paths.ReleaseDir, filesReleaseDir, null, false, true);

#if !BU_OSS
            IO.CopyDir(Paths.ReleaseSrckitDir, Path.Combine(destDirName, "Private"), null, false, true);
            IO.CopyDir(Path.Combine(Paths.BaseDirName, @"tmp\lib"), Path.Combine(destDirName, @"Private\lib"), null, false, true);
#endif

            //IO.MakeDir(autorunReleaseSrcDir);

            /*
             * File.Copy(Path.Combine(Paths.AutorunSrcDir, "Project1.exe"),
             *      Path.Combine(autorunReleaseSrcDir, "autorun.exe"), true);
             *
             * File.Copy(Path.Combine(Paths.AutorunSrcDir, "autorun.inf"),
             *      Path.Combine(autorunReleaseSrcDir, "autorun.inf"), true);
             *
             * File.Copy(Path.Combine(Paths.AutorunSrcDir, "packetix.ico"),
             *      Path.Combine(autorunReleaseSrcDir, "autorun.ico"), true);*/

            // Create a batch file
            string batchFileName = Path.Combine(publicDir, "MakeCD.cmd");
#if !BU_OSS
            StreamWriter w = new StreamWriter(batchFileName);
#else   // !BU_OSS
            StringWriter w = new StringWriter();
#endif
            w.WriteLine(@"SETLOCAL");
            w.WriteLine(@"SET BATCH_FILE_NAME=%0");
            w.WriteLine(@"SET BATCH_DIR_NAME=%0\..");
            w.WriteLine(@"SET NOW_TMP=%time:~0,2%");
            w.WriteLine(@"SET NOW=%date:~0,4%%date:~5,2%%date:~8,2%_%NOW_TMP: =0%%time:~3,2%%time:~6,2%");
            w.WriteLine();
            w.WriteLine();

            string[] files = Directory.GetFiles(filesReleaseDir, "*", SearchOption.AllDirectories);

            string cddir = "CD";

            /*string.Format("CD-v{0}.{1}-{2}-{3}-{4:D4}.{5:D2}.{6:D2}",
             * version / 100, version % 100, build, name,
             * date.Year, date.Month, date.Day);*/

            StringWriter txt = new StringWriter();

            foreach (string filename in files)
            {
                string file = filename;

                BuildSoftware s = new BuildSoftware(file);

                // Software\Windows\PacketiX VPN Server 4.0\32bit (Intel x86)\filename.exe
                string cpustr  = string.Format("{0} - {1}", CPUBitsUtil.CPUBitsToString(s.Cpu.Bits), s.Cpu.Title).Replace("/", "or");
                string cpustr2 = cpustr;

                if (s.Cpu == CpuList.intel)
                {
                    cpustr2 = "";
                    cpustr  = "Intel";
                }

                string tmp = string.Format(@"{1}\{2}\{3}\{5}{4}",
                                           0,
                                           s.Os.Title,
                                           BuildHelper.GetSoftwareTitle(s.Software),
                                           cpustr2,
                                           Path.GetFileName(file),
                                           ""
                                           );

                tmp = Str.ReplaceStr(tmp, "\\\\", "\\");

                w.WriteLine("mkdir \"{1}\\{0}\"", Path.GetDirectoryName(tmp), cddir);
                w.WriteLine("copy /b /y \"{2}\\{0}\" \"{3}\\{1}\"", IO.GetRelativeFileName(file, filesReleaseDir), tmp, baseName, cddir);
                w.WriteLine();

                string txt_filename = tmp;
                txt_filename = Str.ReplaceStr(txt_filename, "\\", "/");

                string txt_description = BuildHelper.GetSoftwareTitle(s.Software);

                string txt_products = BuildHelper.GetSoftwareProductList(s.Software);

                string txt_os = s.Os.Title;

                string txt_cpu = s.Cpu.Title;
                if (s.Cpu.Bits != CPUBits.Both)
                {
                    txt_cpu += " (" + CPUBitsUtil.CPUBitsToString(s.Cpu.Bits) + ")";
                }
                else
                {
                    txt_cpu += " (x86 and x64)";
                }

                string txt_version = BuildHelper.VersionIntToString(version);

                string txt_build = build.ToString();

                string txt_verstr = name;

                string txt_date = Str.DateTimeToStrShortWithMilliSecs(date);

                string txt_lang = "English, Japanese, Simplified Chinese";

                string txt_category = "PacketiX VPN (Commercial)";

#if BU_SOFTETHER
                txt_category = "SoftEther VPN (Freeware)";
#endif

                txt.WriteLine("FILENAME\t" + txt_filename);
                txt.WriteLine("DESCRIPTION\t" + txt_description);
                txt.WriteLine("CATEGORY\t" + txt_category);
                txt.WriteLine("PRODUCT\t" + txt_products);
                txt.WriteLine("OS\t" + txt_os);
                txt.WriteLine("OSLIST\t" + s.Os.OSSimpleList);
                txt.WriteLine("CPU\t" + txt_cpu);
                txt.WriteLine("VERSION\t" + txt_version);
                txt.WriteLine("BUILD\t" + txt_build);
                txt.WriteLine("VERSTR\t" + txt_verstr);
                txt.WriteLine("DATE\t" + txt_date);
                txt.WriteLine("LANGUAGE\t" + txt_lang);
                txt.WriteLine("*");
                txt.WriteLine();
            }

#if BU_OSS
            Con.WriteLine("Installer packages are built on '{0}'. Enjoy it !!", publicDir);

            return(0);
#endif  // BU_OSS

            /*
             * w.WriteLine("mkdir \"{0}\\autorun\"", cddir);
             * w.WriteLine("copy /b /y autorun\\autorun.ico \"{0}\\autorun\"", cddir);
             * w.WriteLine("copy /b /y autorun\\autorun.exe \"{0}\\autorun\"", cddir);
             * w.WriteLine("copy /b /y autorun\\autorun.inf \"{0}\\autorun.inf\"", cddir);
             * */

            string zipFileName = string.Format("VPN-CD-v{0}.{1:D2}-{2}-{3}-{4:D4}.{5:D2}.{6:D2}.zip",
                                               version / 100, version % 100, build, name,
                                               date.Year, date.Month, date.Day);
            w.WriteLine("del {0}", zipFileName);
            w.WriteLine("CD {0}", cddir);
            w.WriteLine("zip -r -0 ../{0} *", zipFileName);
            w.WriteLine("cd ..");
            w.WriteLine("move {0} CD\\", zipFileName);
            w.WriteLine("rename CD {0}-tree", baseName);
            w.WriteLine();

            w.Close();

            // Copy of fastcopy
            string fastcopy_dest = Path.Combine(destDirName, @"Private\fastcopy_bin");
            IO.MakeDirIfNotExists(fastcopy_dest);
            File.Copy(Path.Combine(Paths.UtilityDirName, "FastCopy.exe"), Path.Combine(fastcopy_dest, "FastCopy.exe"), true);
            File.Copy(Path.Combine(Paths.UtilityDirName, "FastEx64.dll"), Path.Combine(fastcopy_dest, "FastEx64.dll"), true);
            File.Copy(Path.Combine(Paths.UtilityDirName, "FastExt1.dll"), Path.Combine(fastcopy_dest, "FastExt1.dll"), true);

            string fastcopy_exe = @"..\Private\fastcopy_bin\FastCopy.exe";

            // Create a upload batch
            string uploadBatchFileName = Path.Combine(publicDir, "UploadNow.cmd");
#if !BU_OSS
            w = new StreamWriter(uploadBatchFileName);
#endif  // !BU_OSS

            string folder_name = "packetix";
#if BU_SOFTETHER
            folder_name = "softether";
#endif
            w.WriteLine(@"mkdir \\download\FILES\{1}\{0}-tree", baseName, folder_name);
            w.WriteLine(@"{0} /cmd=force_copy /exclude={3} /auto_close /force_start /estimate /open_window /error_stop=TRUE /bufsize=128 /disk_mode=diff /speed=full /verify {1}-tree /to=\\download\FILES\{2}\{1}-tree", fastcopy_exe, baseName, folder_name,
                        "\"*files.txt*\"");

            w.WriteLine();

            /*
             * w.WriteLine(@"mkdir \\downloadjp\FILES\{1}\{0}-tree", baseName, folder_name);
             * w.WriteLine(@"{0} /cmd=force_copy /exclude={3} /auto_close /force_start /estimate /open_window /error_stop=TRUE /bufsize=128 /disk_mode=diff /speed=full /verify {1}-tree /to=\\downloadjp\FILES\{2}\{1}-tree", fastcopy_exe, baseName, folder_name,
             *      "\"*files.txt*\"");
             *
             * w.WriteLine();*/

            w.WriteLine(@"copy /y /b {0}-tree\files.txt \\download\FILES\{1}\{0}-tree\files.txt", baseName, folder_name);
            //w.WriteLine(@"copy /y /b {0}-tree\files.txt \\downloadjp\FILES\{1}\{0}-tree\files.txt", baseName, folder_name);


            w.WriteLine();
            w.WriteLine(@"pause");
            w.WriteLine();

            w.Close();


            txt.WriteLine("FILENAME\t" + zipFileName);
#if BU_SOFTETHER
            txt.WriteLine("DESCRIPTION\t" + "ZIP CD-ROM Image Package of SoftEther VPN (for Admins)");
            txt.WriteLine("CATEGORY\t" + "SoftEther VPN (Freeware)");
            txt.WriteLine("PRODUCT\t" + "ZIP CD-ROM Image Package of SoftEther VPN");
#else   // BU_SOFTETHER
            txt.WriteLine("DESCRIPTION\t" + "ZIP CD-ROM Image Package of PacketiX VPN (for Admins)");
            txt.WriteLine("CATEGORY\t" + "PacketiX VPN (Commercial)");
            txt.WriteLine("PRODUCT\t" + "ZIP CD-ROM Image Package of PacketiX VPN");
#endif  // BU_SOFTETHER
            txt.WriteLine("OS\t" + "Any");
            txt.WriteLine("OSLIST\t" + "Any");
            txt.WriteLine("CPU\t" + "CD-ROM");
            txt.WriteLine("VERSION\t" + BuildHelper.VersionIntToString(version));
            txt.WriteLine("BUILD\t" + build.ToString());
            txt.WriteLine("VERSTR\t" + name);
            txt.WriteLine("DATE\t" + Str.DateTimeToStrShortWithMilliSecs(date));
            txt.WriteLine("LANGUAGE\t" + "English, Japanese, Simplified Chinese");
            txt.WriteLine("*");
            txt.WriteLine();

            IO.MakeDirIfNotExists(Path.Combine(publicDir, cddir));
            File.WriteAllText(Path.Combine(Path.Combine(publicDir, cddir), "files.txt"), txt.ToString(), Str.Utf8Encoding);

            // Execution of batch file
            string old_cd = Environment.CurrentDirectory;

            try
            {
                Environment.CurrentDirectory = Path.GetDirectoryName(batchFileName);
            }
            catch
            {
            }

            Win32BuildUtil.ExecCommand(Paths.CmdFileName, string.Format("/C \"{0}\"", batchFileName));

            try
            {
                Environment.CurrentDirectory = old_cd;
            }
            catch
            {
            }

            Con.WriteLine();
            Con.WriteLine("'{0}' に出力されました。", destDirName);

            return(0);
        }
Пример #16
0
        public static void SetManifest(string exe, string manifestName)
        {
            Mutex x = new Mutex(false, MutexName);

            x.WaitOne();

            try
            {
                // Manifest file name
                string filename = Path.Combine(Paths.ManifestsDir, manifestName);
                if (File.Exists(filename) == false)
                {
                    throw new FileNotFoundException(filename);
                }

                FileInfo fi = new FileInfo(exe);

                // Copy exe file to a temporary directory
                string exeTmp = IO.CreateTempFileNameByExt(".exe");
                IO.FileCopy(exe, exeTmp);

                string mtFileName = Path.Combine(Paths.MicrosoftSDKBinDir, "mt.exe");
                string mtArgs     = string.Format("-nologo -manifest \"{0}\" -outputresource:\"{1}\";1", filename, exeTmp);

                Exception ex = null;

                int i;
                // Repeated 20 times in order to avoid locking the file by the anti-virus software
                for (i = 0; i < 20; i++)
                {
                    try
                    {
                        // Execute
                        Win32BuildUtil.ExecCommand(mtFileName, mtArgs, false, true);
                        ex = null;

                        break;
                    }
                    catch (Exception ex2)
                    {
                        ex = ex2;
                    }

                    ThreadObj.Sleep(Secure.Rand31i() % 50);
                }

                if (ex != null)
                {
                    throw new ApplicationException("mt.exe Manifest Processing for '" + exe + "' Failed.");
                }

                ex = null;

                // Revert to the original file
                for (i = 0; i < 20; i++)
                {
                    try
                    {
                        IO.FileCopy(exeTmp, exe);
                        ex = null;

                        break;
                    }
                    catch (Exception ex2)
                    {
                        ex = ex2;
                    }

                    ThreadObj.Sleep(Secure.Rand31i() % 50);
                }

                // Restore the date and time
                File.SetCreationTime(exe, fi.CreationTime);
                File.SetLastAccessTime(exe, fi.LastAccessTime);
                File.SetLastWriteTime(exe, fi.LastWriteTime);
            }
            finally
            {
                x.ReleaseMutex();
            }
        }