OSDN Git Service

AppliStation-all,単体の実行ファイルのインストール対応
authorttp <ttp@users.sourceforge.jp>
Sun, 11 Oct 2009 05:19:44 +0000 (14:19 +0900)
committerttp <ttp@users.sourceforge.jp>
Sun, 11 Oct 2009 05:19:44 +0000 (14:19 +0900)
AppliStation/AppliStation.Util/GUIUtils.cs
AppliStation/PackageInfoForm.cs
AppliStation/PackageListViewForm.cs
AppliStation/PackageUninstallConfirmForm.cs
archive-inst/Program.cs
na-get-lib/NaGet.Packages.Install/Installation.cs
na-get-lib/NaGet.Packages.Install/RegistriedUninstallers.cs
na-get-lib/NaGet.Packages.Install/Uninstallation.cs
na-get-lib/NaGet.SubCommands/NaGetUpdate.cs

index ed5a057..7cc2c16 100644 (file)
@@ -101,7 +101,8 @@ namespace AppliStation.Util
                                } catch (FileNotFoundException) {\r
                                        ico = null;\r
                                }\r
-                       } else if (pkg.Type == InstallerType.ARCHIVE) {\r
+                       } else if ((pkg.Type == InstallerType.ARCHIVE)\r
+                                  ||(pkg.Type == InstallerType.ITSELF)) {\r
                                string progGrp = Path.Combine(NaGet.Env.ArchiveProgramGroup, pkg.Name);\r
                                if (Directory.Exists(progGrp)) {\r
                                        string[] lnkFiles = Directory.GetFiles(progGrp, "*.lnk");\r
index 99a0776..64aae40 100644 (file)
@@ -53,7 +53,8 @@ namespace AppliStation
                                UninstallInformation uninstInfo = ((InstalledPackage) pkg).UninstallInfo;\r
                                \r
                                string instPath = null;\r
-                               if (pkg.Type == InstallerType.ARCHIVE) {\r
+                               if ((pkg.Type == InstallerType.ARCHIVE)\r
+                                   ||(pkg.Type == InstallerType.ITSELF)) {\r
                                        instPath = Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name);\r
                                } else if (Directory.Exists(uninstInfo.InstallLocation)) {\r
                                        instPath = uninstInfo.InstallLocation;\r
@@ -242,6 +243,9 @@ namespace AppliStation
                                case InstallerType.MSI_PACKAGE:\r
                                        typeValueLabel.Text = "MSIファイル形式";\r
                                        break;\r
+                               case InstallerType.ITSELF:\r
+                                       typeValueLabel.Text = "単体の実行ファイル";\r
+                                       break;\r
                                default:\r
                                        typeValueLabel.Text = "不明なインストール形式(インストール不能)";\r
                                        break;\r
index 872b136..5e52ef1 100644 (file)
@@ -566,7 +566,7 @@ namespace AppliStation
                void OpenInstalledDirectoryStripMenuItemClick(object sender, EventArgs e)\r
                {\r
                        foreach (InstalledPackage pkg in GetSelectedPackages<InstalledPackage>()) {\r
-                               if (pkg.Type == InstallerType.ARCHIVE) {\r
+                               if (pkg.Type == InstallerType.ARCHIVE || pkg.Type == InstallerType.ITSELF) {\r
                                        System.Diagnostics.Process.Start(Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name));\r
                                } else if (Directory.Exists(pkg.discoverInstalledLocation())) {\r
                                        System.Diagnostics.Process.Start(pkg.discoverInstalledLocation());\r
@@ -616,11 +616,16 @@ namespace AppliStation
                                webOfficialToolStripMenuItem.Enabled = ! (pkg.Url == null || string.IsNullOrEmpty(pkg.Url.Href));\r
                                // webGoogleSearchToolStripMenuItem always active.\r
                                \r
-                               bool installedDirectoryStripMenuItemVisible = isInstalledPackage &&\r
-                                       ( (pkg.Type == InstallerType.ARCHIVE) || Directory.Exists(((InstalledPackage) pkg).discoverInstalledLocation()) );\r
-                               installedDirectoryStripMenuItem.Visible = installedDirectoryStripMenuItemVisible;\r
-                               if (installedDirectoryStripMenuItemVisible) {\r
-                                       buildInstalledDirectoryMenuItemStripChildren((InstalledPackage) pkg);\r
+                               if (isInstalledPackage) {\r
+                                       bool installedDirectoryStripMenuItemVisible = \r
+                                               (pkg.Type == InstallerType.ARCHIVE) ||\r
+                                               (pkg.Type == InstallerType.ITSELF) ||\r
+                                               Directory.Exists(((InstalledPackage) pkg).discoverInstalledLocation());\r
+                                       \r
+                                       installedDirectoryStripMenuItem.Visible = installedDirectoryStripMenuItemVisible;\r
+                                       if (installedDirectoryStripMenuItemVisible) {\r
+                                               buildInstalledDirectoryMenuItemStripChildren((InstalledPackage) pkg);\r
+                                       }\r
                                }\r
                        }\r
                        \r
index 2cc85fe..4c7621b 100644 (file)
@@ -70,7 +70,8 @@ namespace AppliStation
                                return false;   \r
                        }\r
                        \r
-                       return (uninstallPackage.Type != InstallerType.ARCHIVE);\r
+                       return (uninstallPackage.Type != InstallerType.ARCHIVE)\r
+                               && (uninstallPackage.Type != InstallerType.ITSELF);\r
                }\r
                \r
                void RunasCheckBoxCheckedChanged(object sender, EventArgs e)\r
index 002f6c2..0014ba7 100644 (file)
@@ -291,6 +291,7 @@ namespace ArchiveInstall
                        string targetDir = null;\r
                        Package package = null;\r
                        \r
+                       // 引数パースおよびヘルプ表示\r
                        try {\r
                                parseMainArguments(args, out arcFile, out targetDir, out package);\r
                        } catch (ArgumentException) {\r
@@ -301,19 +302,30 @@ namespace ArchiveInstall
                                Console.WriteLine("\t{0} -x PackageName\t\tUninstall", executeFileName);\r
                                Console.WriteLine();\r
                        }\r
-                                               \r
-                       if (arcFile != null) { // install or extract    \r
-                               string tempExtractDir = targetDir + "___temp___"; // HACK \r
+\r
+                       // インストールおよび展開処理\r
+                       if (arcFile != null) {\r
+                               string tempExtractDir = targetDir + "___temp___"; // HACK\r
                                Directory.CreateDirectory(tempExtractDir);\r
                                \r
                                try {\r
-                                       extract(arcFile, tempExtractDir);\r
+                                       // STEP1. 書庫の展開\r
+                                       if (package != null && package.Type == InstallerType.ITSELF) {\r
+                                               // 書庫でない場合展開せずにそのままコピーする\r
+                                               string destFile = Path.Combine(tempExtractDir, Path.GetFileName(arcFile));\r
+                                               File.Copy(arcFile, destFile);\r
+                                       } else {\r
+                                               extract(arcFile, tempExtractDir);\r
+                                       }\r
                                        \r
+                                       // STEP2. インストール\r
                                        install(tempExtractDir, targetDir);\r
                                        \r
                                        if (package != null) {\r
+                                               // STEP3. カスタマイズ可能な後処理\r
                                                postInstall(targetDir, package);\r
                                                \r
+                                               // STEP4. パッケージ情報をインストール先(targetDir)に置く\r
                                                storeInstalledFileList(targetDir);\r
                                                storePackageXml(package, targetDir);\r
                                        }\r
index f4fb5aa..de5d2a1 100644 (file)
@@ -114,7 +114,10 @@ namespace NaGet.Packages.Install
                public bool InstallSuccessed {\r
                        get {\r
                                switch (InstalledPackage.Type) {\r
-                                       case InstallerType.ARCHIVE: // アーカイブインストーラはフォルダの確認\r
+                                       case InstallerType.ARCHIVE:\r
+                                       case InstallerType.ITSELF:\r
+                                               // アーカイブインストーラおよび配布exeそれ自身が実行ファイルのとき、\r
+                                               // (AppliStationの作る)プログラムフォルダの存在のみで確認を行う。\r
                                                return Directory.Exists(Path.Combine(NaGet.Env.ArchiveProgramFiles, InstalledPackage.Name));\r
                                        case InstallerType.EXEC_INSTALLER:\r
                                        case InstallerType.MSI_PACKAGE:\r
@@ -144,6 +147,7 @@ namespace NaGet.Packages.Install
                        get {\r
                                switch (InstalledPackage.Type) {\r
                                        case InstallerType.ARCHIVE:\r
+                                       case InstallerType.ITSELF:\r
                                        case InstallerType.MSI_PACKAGE:\r
                                                return true;\r
                                        case InstallerType.EXEC_INSTALLER:\r
@@ -158,7 +162,10 @@ namespace NaGet.Packages.Install
                /// サイレントインストールだけをサポートしているか否か\r
                /// </summary>\r
                public bool SupportsSilentOnly {\r
-                       get { return InstalledPackage.Type == InstallerType.ARCHIVE; }\r
+                       get {\r
+                               return (InstalledPackage.Type == InstallerType.ARCHIVE)\r
+                                       || (InstalledPackage.Type == InstallerType.ITSELF);\r
+                       }\r
                }\r
                \r
                /// <summary>\r
@@ -166,7 +173,10 @@ namespace NaGet.Packages.Install
                /// </summary>\r
                /// <remark>RunAsが必要か否かの判断にしようされる</remark>\r
                public bool TargetPC {\r
-                       get { return InstalledPackage.Type != InstallerType.ARCHIVE; }\r
+                       get {\r
+                               return (InstalledPackage.Type != InstallerType.ARCHIVE)\r
+                                       && (InstalledPackage.Type != InstallerType.ITSELF);\r
+                       }\r
                }\r
                \r
                #endregion\r
@@ -274,10 +284,12 @@ namespace NaGet.Packages.Install
                                        hProcess = Process.Start("msiexec", msiexecArgs);\r
                                        break;\r
                                case InstallerType.ARCHIVE:\r
+                               case InstallerType.ITSELF:\r
                                        string argument = string.Format("-i \"{0}\" \"{1}\"", installerfile, this.InstalledPackage.Name);\r
                                        hProcess = createExtractArchiveProcess(argument,\r
                                                                               this.OutputDataReceived,\r
                                                                               this.ErrorDataReceived);\r
+                                       // Note: ARCHIVEかITSELFの判断はarchive-instが行う\r
                                        break;\r
                                default:\r
                                        throw new NotImplementedException("Not implemented archive installation yet");\r
@@ -445,6 +457,9 @@ namespace NaGet.Packages.Install
                                        list.AddRange(Directory.GetFiles(basedir, "*.7z"));\r
                                        list.AddRange(Directory.GetFiles(basedir, "*.tar*"));\r
                                        break;\r
+                               case InstallerType.ITSELF:\r
+                                       list.AddRange(Directory.GetFiles(basedir, "*.exe"));\r
+                                       break;\r
                                default:\r
                                        return null;\r
                        }\r
index ee5e03d..8b19488 100644 (file)
@@ -109,7 +109,9 @@ namespace NaGet.Packages.Install
                {\r
                        foreach (UninstallInformation info in RegistriedUninstallers.Uninstallers) {\r
                                foreach (Package pkg in pkgList) {\r
-                                       if (pkg.Type != InstallerType.ARCHIVE && pkg.UninstallerKey != null) {\r
+                                       if (pkg.Type != InstallerType.ARCHIVE\r
+                                           && pkg.Type != InstallerType.ITSELF\r
+                                           && pkg.UninstallerKey != null) {\r
                                                Match match = Regex.Match(info.DisplayName, pkg.UninstallerKey);\r
                                                \r
                                                if (match.Success) {\r
@@ -130,7 +132,9 @@ namespace NaGet.Packages.Install
                /// <returns>インストール情報</returns>\r
                public static InstalledPackage GetInstalledPackageFor(Package pkg)\r
                {\r
-                       if (pkg.Type == InstallerType.ARCHIVE || pkg.Type == InstallerType.CANNOT_INSTALL) {\r
+                       if (pkg.Type == InstallerType.ARCHIVE\r
+                           || pkg.Type == InstallerType.ITSELF\r
+                           || pkg.Type == InstallerType.CANNOT_INSTALL) {\r
                                return null;\r
                        }\r
                        \r
index eebcd80..997ffb4 100644 (file)
@@ -47,7 +47,8 @@ namespace NaGet.Packages.Install
                public bool Installed\r
                {\r
                        get {\r
-                               if (UninstalledPackage.Type == InstallerType.ARCHIVE) {\r
+                               if ((UninstalledPackage.Type == InstallerType.ARCHIVE)\r
+                                   || UninstalledPackage.Type == InstallerType.ITSELF) {\r
                                        return Directory.Exists(UninstalledPackage.UninstallInfo.InstallLocation);\r
                                } else {\r
                                        foreach (UninstallInformation info in RegistriedUninstallers.Uninstallers) {\r
@@ -119,9 +120,7 @@ namespace NaGet.Packages.Install
                        } else {\r
                                ProcessStartInfo procInfo = new ProcessStartInfo(null, uninstallString);\r
                                procInfo.UseShellExecute = false;\r
-                               if (UninstalledPackage.Type == InstallerType.ARCHIVE) {\r
-                                       procInfo.CreateNoWindow = true;\r
-                               }\r
+                               procInfo.CreateNoWindow = true;\r
                                using (NaGet.InteropServices.CreateProcessCaller p = new NaGet.InteropServices.CreateProcessCaller(procInfo)) {\r
                                        \r
                                        if (NaGet.Env.InstallProcessOnBackground) {\r
index 68a05d8..5c9d5fc 100644 (file)
@@ -129,7 +129,7 @@ namespace NaGet.SubCommands
                                                        repo.Name = (string.IsNullOrEmpty(pkgList.Name))? repo.Name : pkgList.Name;\r
                                                        \r
                                                        avaiablePackageList.AddPackages(pkgList.Packages);\r
-                                               } catch (InvalidOperationException e) {\r
+                                               } catch (InvalidOperationException) {\r
                                                        RaiseTaskSetEvent(NaGetTaskSetEventType.ERROR, string.Format("Repository {0} does not have a AppliStation Native XML softlist.", repo.Name ?? repo.Url.Href));\r
                                                }\r
                                        } else {\r