项目备案-MoveInLaunch(Newegg-2007-06)

项目名称:MoveInLaunchTool

背景:
本系统是为了解决公司MoveInLaunch Team在日常Launch项目过程中过于繁琐的步骤造成了工作效率低与工作失误,从而影响了Launch项目的质量。本系统采用Windows界面,使用Web Service与Remoting技术实现操作远程生产环境上的服务器;并且采用Http通信协议进行跨网络传输文件的操作。

解决方案:
i、Client端                                                    -- WindowsForm应用程序
ii、Release Server(Mists02)需要发布的项目的文件所在服务器    -- 驻留WebService以执行各种文件操作
iii、Manager Server Client端与Production环境里的Launch Servers的中间过渡服务器
                                                               -- 驻留WebService操作Production上的Servers;Manager Server以共享的方式让Production Server获取需要发布的文件

技术方案:
i、Client端运用WinForm界面
 1)利用多线程技术;
 2)以向导式的Step by Step的方式完成整个Launch流程;
 3)以子控件的方式展示界面;
 4)建立数据仓库(CommonData)存储整个Launch过程中影响下一流程的数据;
ii、Release Server上驻留一个WebService
 1)使用IO的API实现文件的操作;
 2)调用Process的API实现压缩文件,代码如下:

 1   packageInfo.PackageName = "LaunchPackage";
 2            packageInfo.ReleasePath = Guid.NewGuid().ToString("N");
 3
 4            Process process = new Process();
 5            ProcessStartInfo processStartInfo = new ProcessStartInfo();
 6            processStartInfo.FileName = @"C:\Program Files\WinRAR\WinRAR.exe";
 7            processStartInfo.RedirectStandardError = true;
 8            processStartInfo.RedirectStandardInput = true;
 9            processStartInfo.RedirectStandardOutput = true;
10            processStartInfo.UseShellExecute = false;
11            processStartInfo.Arguments = string.Format(@"a -ap{0} -ep1 -ibck -r -v1m -sfxWinCon-e.SFX {1} {2}",
12                packageInfo.ReleasePath, Path.Combine(finalDirectory, packageInfo.PackageName), Path.Combine(tempPath, "*.*"));
13            process.StartInfo = processStartInfo;
14            process.StartInfo.CreateNoWindow = true;
15
16            bool isSuccess = process.Start();
17            if (!isSuccess)
18            {
19                outErrorInfo = process.StartInfo.ToString();
20            }

21            process.WaitForExit();
22            string processError = process.StandardError.ReadToEnd().Trim();
23            if (!String.IsNullOrEmpty(processError))
24            {
25                isSuccess = false;
26                outErrorInfo = processError;
27            }

28


 3)运用序列化与反序列化的方式在XML文件与实体类之间进行转换;
 4)运用XMLDocument编程,实现本地数据存储,如文件树的存储;
 5)运用HttpHandler编程,将Release Server上已打包的RAR文件下载到Client端
iii、Manager Server上驻留一个WebService
 1)给所有Production Server开设一个权限,使其以共享的方式获取Launch的文件;
 2)使用RemoteCommand编程(System.Net,System.Management),通过Manager Server使用Production Server的管理员权限远程控制,实现命令行的文件、IIS等操作;
 3)使用第三方组件ICSharpCode,将Production Server上备份到Manager Server的共享里的文件进行文件压缩,代码如下:

 


 4)运用HttpHandler编程实现将Client端的文件上传到Manager Server与将Manager Server上的备份文件下载到Client端。

posted @ 2007-07-13 15:31  charles  阅读(250)  评论(0)    收藏  举报