// 从 dp2003.com 安装全部方案 void InstallStatisProjects() { string strError = ""; int nRet = -1; int nInstallCount = 0; bool bDebugger = false; if (Control.ModifierKeys == Keys.Control) { bDebugger = true; } // 下载projects.xml文件 string strLocalFileName = PathUtil.MergePath(this.DataDir, "~temp_projects.xml"); string strTempFileName = PathUtil.MergePath(this.DataDir, "~temp_download_projects.xml"); try { File.Delete(strLocalFileName); } catch { } try { File.Delete(strTempFileName); } catch { } nRet = WebFileDownloadDialog.DownloadWebFile( this, "http://dp2003.com/dp2circulation/projects/projects.xml", strLocalFileName, strTempFileName, out strError); if (nRet == -1) { goto ERROR1; } // 列出已经安装的方案的URL List <string> installed_urls = new List <string>(); List <Form> newly_opened_forms = new List <Form>(); List <Form> forms = new List <Form>(); List <Type> types = new List <Type>(); types.Add(typeof(Iso2709StatisForm)); types.Add(typeof(OperLogStatisForm)); types.Add(typeof(ReaderStatisForm)); types.Add(typeof(ItemStatisForm)); types.Add(typeof(OrderStatisForm)); types.Add(typeof(BiblioStatisForm)); types.Add(typeof(XmlStatisForm)); types.Add(typeof(PrintOrderForm)); foreach (Type type in types) { // bool bNewOpened = false; var form = GetTopChildWindow(type); if (form == null) { form = (Form)Activator.CreateInstance(type); form.MdiParent = this; form.WindowState = FormWindowState.Minimized; form.Show(); newly_opened_forms.Add(form); Application.DoEvents(); } forms.Add(form); dynamic o = form; List <string> urls = new List <string>(); nRet = o.ScriptManager.GetInstalledUrls(out urls, out strError); if (nRet == -1) { goto ERROR1; } installed_urls.AddRange(urls); } // 凭条打印 { List <string> urls = new List <string>(); nRet = this.OperHistory.ScriptManager.GetInstalledUrls(out urls, out strError); if (nRet == -1) { goto ERROR1; } installed_urls.AddRange(urls); } // 框架窗口 { List <string> urls = new List <string>(); nRet = this.ScriptManager.GetInstalledUrls(out urls, out strError); if (nRet == -1) { goto ERROR1; } installed_urls.AddRange(urls); } try { SelectInstallProjectsDialog dlg = new SelectInstallProjectsDialog(); MainForm.SetControlFont(dlg, this.DefaultFont); dlg.XmlFilename = strLocalFileName; dlg.InstalledUrls = installed_urls; if (bDebugger == true) { dlg.Category = "debugger"; } dlg.StartPosition = FormStartPosition.CenterScreen; this.AppInfo.LinkFormState(dlg, "SelectInstallProjectsDialog_state"); dlg.ShowDialog(this); this.AppInfo.UnlinkFormState(dlg); if (dlg.DialogResult == System.Windows.Forms.DialogResult.Cancel) { return; } // 分宿主进行安装 foreach (Form form in forms) { // 为一个统计窗安装若干方案 // parameters: // projects 待安装的方案。注意有可能包含不适合安装到本窗口的方案 // return: // -1 出错 // >=0 安装的方案数 nRet = InstallProjects( form, GetWindowName(form), dlg.SelectedProjects, "!url", out strError); if (nRet == -1) { goto ERROR1; } nInstallCount += nRet; } // 凭条打印 { nRet = InstallProjects( this.OperHistory, "凭条打印", dlg.SelectedProjects, "!url", out strError); if (nRet == -1) { goto ERROR1; } nInstallCount += nRet; } // MainForm { nRet = InstallProjects( this, "框架窗口", dlg.SelectedProjects, "!url", out strError); if (nRet == -1) { goto ERROR1; } nInstallCount += nRet; } } finally { // 关闭本次新打开的窗口 foreach (Form form in newly_opened_forms) { form.Close(); } } MessageBox.Show(this, "共安装方案 " + nInstallCount.ToString() + " 个"); return; ERROR1: MessageBox.Show(this, strError); }
// 获得统计窗的汉字类型名 static string GetWindowName(object form) { return(SelectInstallProjectsDialog.GetHanziHostName(GetTypeName(form))); }
// 从磁盘安装全部方案 void InstallStatisProjectsFromDisk() { string strError = ""; int nRet = -1; int nInstallCount = 0; bool bDebugger = false; if (Control.ModifierKeys == Keys.Control) { bDebugger = true; } FolderBrowserDialog dir_dlg = new FolderBrowserDialog(); dir_dlg.Description = "请指定方案所在目录:"; dir_dlg.RootFolder = Environment.SpecialFolder.MyComputer; dir_dlg.ShowNewFolderButton = false; // dir_dlg.SelectedPath = this.textBox_outputFolder.Text; if (dir_dlg.ShowDialog() != DialogResult.OK) { return; } // this.textBox_outputFolder.Text = dir_dlg.SelectedPath; // 寻找 projects.xml 文件 string strLocalFileName = PathUtil.MergePath(dir_dlg.SelectedPath, "projects.xml"); if (File.Exists(strLocalFileName) == false) { // strError = "您所指定的目录 '" + dir_dlg.SelectedPath + "' 中并没有包含 projects.xml 文件,无法进行安装"; // goto ERROR1; // 如果没有 projects.xml 文件,则搜索全部 *.projpack 文件,并创建好一个临时的 ~projects.xml文件 strLocalFileName = PathUtil.MergePath(this.DataDir, "~projects.xml"); nRet = ScriptManager.BuildProjectsFile(dir_dlg.SelectedPath, strLocalFileName, out strError); if (nRet == -1) { goto ERROR1; } } // 列出已经安装的方案的URL List <string> installed_urls = new List <string>(); List <Form> newly_opened_forms = new List <Form>(); List <Form> forms = new List <Form>(); List <Type> types = new List <Type>(); types.Add(typeof(Iso2709StatisForm)); types.Add(typeof(OperLogStatisForm)); types.Add(typeof(ReaderStatisForm)); types.Add(typeof(ItemStatisForm)); types.Add(typeof(OrderStatisForm)); types.Add(typeof(BiblioStatisForm)); types.Add(typeof(XmlStatisForm)); types.Add(typeof(PrintOrderForm)); foreach (Type type in types) { // bool bNewOpened = false; var form = GetTopChildWindow(type); if (form == null) { form = (Form)Activator.CreateInstance(type); form.MdiParent = this; form.WindowState = FormWindowState.Minimized; form.Show(); newly_opened_forms.Add(form); Application.DoEvents(); } forms.Add(form); dynamic o = form; List <string> urls = new List <string>(); nRet = o.ScriptManager.GetInstalledUrls(out urls, out strError); if (nRet == -1) { goto ERROR1; } installed_urls.AddRange(urls); } // 凭条打印 { List <string> urls = new List <string>(); nRet = this.OperHistory.ScriptManager.GetInstalledUrls(out urls, out strError); if (nRet == -1) { goto ERROR1; } installed_urls.AddRange(urls); } // 框架窗口 { List <string> urls = new List <string>(); nRet = this.ScriptManager.GetInstalledUrls(out urls, out strError); if (nRet == -1) { goto ERROR1; } installed_urls.AddRange(urls); } try { SelectInstallProjectsDialog dlg = new SelectInstallProjectsDialog(); MainForm.SetControlFont(dlg, this.DefaultFont); dlg.XmlFilename = strLocalFileName; dlg.InstalledUrls = installed_urls; if (bDebugger == true) { dlg.Category = "debugger"; } dlg.StartPosition = FormStartPosition.CenterScreen; this.AppInfo.LinkFormState(dlg, "SelectInstallProjectsDialog_state"); dlg.ShowDialog(this); this.AppInfo.UnlinkFormState(dlg); if (dlg.DialogResult == System.Windows.Forms.DialogResult.Cancel) { return; } // 分宿主进行安装 foreach (Form form in forms) { // 为一个统计窗安装若干方案 // parameters: // projects 待安装的方案。注意有可能包含不适合安装到本窗口的方案 // return: // -1 出错 // >=0 安装的方案数 nRet = InstallProjects( form, GetWindowName(form), dlg.SelectedProjects, dir_dlg.SelectedPath, out strError); if (nRet == -1) { goto ERROR1; } nInstallCount += nRet; } // 凭条打印 { nRet = InstallProjects( this.OperHistory, "凭条打印", dlg.SelectedProjects, dir_dlg.SelectedPath, out strError); if (nRet == -1) { goto ERROR1; } nInstallCount += nRet; } // MainForm { nRet = InstallProjects( this, "框架窗口", dlg.SelectedProjects, dir_dlg.SelectedPath, out strError); if (nRet == -1) { goto ERROR1; } nInstallCount += nRet; } } finally { // 关闭本次新打开的窗口 foreach (Form form in newly_opened_forms) { form.Close(); } } MessageBox.Show(this, "共安装方案 " + nInstallCount.ToString() + " 个"); return; ERROR1: MessageBox.Show(this, strError); }