+ void SoftCollectionFileImportToolStripMenuItemClick(object sender, EventArgs e)\r
+ {\r
+ string pwd = Directory.GetCurrentDirectory();\r
+ \r
+ OpenFileDialog fd = new OpenFileDialog();\r
+ fd.Filter = "ソフトコレクションファイル (*.txt)|*.txt";\r
+ fd.DefaultExt = "txt";\r
+ fd.CheckFileExists = true;\r
+ fd.CheckPathExists = true;\r
+ fd.Multiselect = false;\r
+ fd.ShowDialog();\r
+ if (fd.FileNames.Length > 0) {\r
+ string filepath = Path.GetFullPath(fd.FileName);\r
+ Directory.SetCurrentDirectory(pwd); // ファイルダイアログで変わったカレントディレクトリを戻す\r
+ \r
+ IList<Package> pkgs;\r
+ IList<string> invalid;\r
+ \r
+ try {\r
+ PackageCollectionFileData collectionData = new PackageCollectionFileData();\r
+ collectionData.load(filepath);\r
+ collectionData.generatePackages(pkgListsMan, out pkgs, out invalid);\r
+ \r
+ if (invalid.Count > 0) {\r
+ DialogResult result = MessageBox.Show("一部読み込みの失敗したパッケージがありますが続行しますか?", "インポート", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);\r
+ if (result != DialogResult.OK) {\r
+ return;\r
+ }\r
+ }\r
+ } catch (IOException) {\r
+ MessageBox.Show("ファイルの読み込みに失敗しました", "インポート", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ return;\r
+ }\r
+ \r
+ {\r
+ InstallationConfirmForm confirm = new InstallationConfirmForm();\r
+ confirm.PkgListsManager = pkgListsMan;\r
+ confirm.Installations = Installation.ConvertInstallations( NaGet.Utils.IEnumerable2Array(pkgs) );\r
+ confirm.UseRunas = confirm.GetShouldUseRunas();\r
+ DialogResult result = confirm.ShowDialog(this);\r
+ \r
+ if (result == DialogResult.OK) {\r
+ Installation[] insts = confirm.CheckedInstallations;\r
+ \r
+ if (confirm.UseRunas) {\r
+ installRunasActionInvoke(insts);\r
+ } else {\r
+ installActionInvoke(insts);\r
+ }\r
+ \r
+ UpdatePackageList();\r
+ }\r
+ }\r
+ } else {\r
+ Directory.SetCurrentDirectory(pwd); // ファイルダイアログで変わったカレントディレクトリを戻す\r
+ }\r
+ }\r
+ \r
+ void SoftCollectionFileExportToolStripMenuItemClick(object sender, EventArgs e)\r
+ {\r
+ string pwd = Directory.GetCurrentDirectory();\r
+ string[] softtargets = new string[]{"PCにインストールされたソフト", "AppliStation内でインストールされたソフト", "インストールされたソフトすべて"};\r
+ int softtargetid = softtargets.Length - 1;\r
+ \r
+ {\r
+ AppliStation.Util.OptionDialog optdialog = AppliStation.Util.OptionDialog.createOptionDialog(\r
+ "ソフトコレクションファイルに出力するソフトの種類を選択してください。", "エクスポート", "エクスポートするソフト",\r
+ System.Drawing.SystemIcons.Question, MessageBoxButtons.OKCancel,\r
+ softtargets, softtargets.Length-1);\r
+ if (optdialog.ShowDialog(this) != DialogResult.OK) {\r
+ return; // canceled\r
+ } else if (optdialog.UserInputValue != null) {\r
+ softtargetid = (int) optdialog.UserInputValue;\r
+ }\r
+ }\r
+ \r
+ SaveFileDialog fd = new SaveFileDialog();\r
+ fd.Filter = "ソフトコレクションファイル (*.txt)|*.txt";\r
+ fd.DefaultExt = "txt";\r
+ fd.CheckPathExists = true;\r
+ fd.OverwritePrompt = true;\r
+ fd.ShowDialog();\r
+ if (fd.FileNames.Length > 0) {\r
+ string filepath = Path.GetFullPath(fd.FileName);\r
+ Directory.SetCurrentDirectory(pwd); // ファイルダイアログで変わったカレントディレクトリを戻す\r
+ \r
+ PackageCollectionFileData collectionData = new PackageCollectionFileData();\r
+ \r
+ switch (softtargetid) {\r
+ case 0: // PCにインストール\r
+ collectionData.loadPackages(pkgListsMan.SystemInstalledPkgList.GetEnumerator());\r
+ break;\r
+ case 1: // AppliStation内にインストール\r
+ collectionData.loadPackages(pkgListsMan.InstalledPkgList.GetEnumerator());\r
+ break;\r
+ case 2: // すべて\r
+ default:\r
+ collectionData.loadPackages(pkgListsMan.GetAllInstalledPackages());\r
+ break;\r
+ }\r
+ \r
+ try {\r
+ collectionData.saveAs(fd.FileName);\r
+ } catch (UnauthorizedAccessException) {\r
+ if ((File.GetAttributes(fd.FileName) & FileAttributes.ReadOnly) != 0) {\r
+ MessageBox.Show("読み取り専用属性が設定されています。\n別のファイルを指定してください。", "エクスポート", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ } else {\r
+ MessageBox.Show("ファイルへの書き込みが許可されていません。\n別のファイルを指定してください。", "エクスポート", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ }\r
+ return;\r
+ } catch (IOException) {\r
+ MessageBox.Show("ファイルの書き込みに失敗しました", "エクスポート", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+ return;\r
+ }\r
+ } else {\r
+ Directory.SetCurrentDirectory(pwd); // ファイルダイアログで変わったカレントディレクトリを戻す\r
+ }\r
+ }\r
+ \r