OSDN Git Service

AppliStation-GUI,インストール先のフォルダをオートディスカバディ(自動検索)してみるテスツ
authorttp <ttp@users.sourceforge.jp>
Tue, 14 Oct 2008 13:55:37 +0000 (13:55 +0000)
committerttp <ttp@users.sourceforge.jp>
Tue, 14 Oct 2008 13:55:37 +0000 (13:55 +0000)
git-svn-id: http://localhost/svn/AppliStation/trunk@986 34ed2c89-c49f-4a4b-abdb-c318350108cf

AppliStation/PackageInfoForm.cs
AppliStation/PackageListViewForm.cs
na-get-lib/NaGet.Packages.Install/InstalledPackage.cs

index 0844e0b..646acf6 100644 (file)
@@ -1,9 +1,10 @@
 using System;\r
 using System.Drawing;\r
 using System.Windows.Forms;\r
+using System.Text;\r
+using System.IO;\r
 using NaGet.Packages.Install;\r
 using NaGet.Packages;\r
-using System.Text;\r
 \r
 namespace AppliStation\r
 {\r
@@ -53,8 +54,8 @@ namespace AppliStation
                                \r
                                string instPath = null;\r
                                if (pkg.Type == InstallerType.ARCHIVE) {\r
-                                       instPath = System.IO.Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name);\r
-                               } else if (System.IO.Directory.Exists(uninstInfo.InstallLocation)) {\r
+                                       instPath = Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name);\r
+                               } else if (Directory.Exists(uninstInfo.InstallLocation)) {\r
                                        instPath = uninstInfo.InstallLocation;\r
                                }\r
                                \r
@@ -252,7 +253,7 @@ namespace AppliStation
                {\r
                        string linkData = e.Link.LinkData.ToString();\r
                        \r
-                       if (System.IO.Directory.Exists(linkData)) {\r
+                       if (Directory.Exists(linkData)) {\r
                                e.Link.Visited = true;\r
                                System.Diagnostics.Process.Start(e.Link.LinkData.ToString());\r
                        } else if (System.Text.RegularExpressions.Regex.IsMatch(linkData, @"(https?|file)://")) {\r
index 7468b75..08ede70 100644 (file)
@@ -130,7 +130,8 @@ namespace AppliStation
                \r
                private void buildInstalledDirectoryMenuItemStripChildren(InstalledPackage pkg)\r
                {\r
-                       installedDirectoryStripMenuItem.BaseFolderPath = pkg.UninstallInfo.InstallLocation;\r
+                       //installedDirectoryStripMenuItem.BaseFolderPath = pkg.UninstallInfo.InstallLocation;\r
+                       installedDirectoryStripMenuItem.BaseFolderPath = pkg.discoverInstalledLocation();\r
                }\r
                \r
                #region packageListViewのSort関連\r
@@ -524,8 +525,8 @@ namespace AppliStation
                        foreach (InstalledPackage pkg in SelectedPackages<InstalledPackage>()) {\r
                                if (pkg.Type == InstallerType.ARCHIVE) {\r
                                        System.Diagnostics.Process.Start(Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name));\r
-                               } else if (Directory.Exists(pkg.UninstallInfo.InstallLocation)) {\r
-                                       System.Diagnostics.Process.Start(pkg.UninstallInfo.InstallLocation);\r
+                               } else if (Directory.Exists(pkg.discoverInstalledLocation())) {\r
+                                       System.Diagnostics.Process.Start(pkg.discoverInstalledLocation());\r
                                }\r
 \r
                                break;\r
@@ -573,7 +574,7 @@ namespace AppliStation
                                // webGoogleSearchToolStripMenuItem always active.\r
                                \r
                                bool installedDirectoryStripMenuItemVisible = isInstalledPackage &&\r
-                                       ( (pkg.Type == InstallerType.ARCHIVE) || Directory.Exists(((InstalledPackage) pkg).UninstallInfo.InstallLocation) );\r
+                                       ( (pkg.Type == InstallerType.ARCHIVE) || Directory.Exists(((InstalledPackage) pkg).discoverInstalledLocation()) );\r
                                installedDirectoryStripMenuItem.Visible = installedDirectoryStripMenuItemVisible;\r
                                if (installedDirectoryStripMenuItemVisible) {\r
                                        buildInstalledDirectoryMenuItemStripChildren((InstalledPackage) pkg);\r
index 857d43b..032825a 100644 (file)
@@ -14,6 +14,36 @@ namespace NaGet.Packages.Install
                /// </summary>\r
                public UninstallInformation UninstallInfo;\r
                \r
+               /// <summary>\r
+               /// インストール先フォルダを返す。\r
+               /// <code>UninstallInfo.InstallLocation</code>が空ならば、\r
+               /// 解決を試みる。\r
+               /// </summary>\r
+               /// <returns>インストール先フォルダ。見つからなかったら<code>null</code></returns>\r
+               public string discoverInstalledLocation()\r
+               {\r
+                       if (string.IsNullOrEmpty(UninstallInfo.InstallLocation)) {\r
+                               // ○○/名前を探す\r
+                               string[] suggestions = new string[3];\r
+                               suggestions[0] = Environment.GetEnvironmentVariable("ProgramFiles");\r
+                               if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("ProgramFiles(x86)"))) {\r
+                                       suggestions[1] = Environment.GetEnvironmentVariable("ProgramFiles(x86)");\r
+                               }\r
+                               suggestions[2] = Path.GetPathRoot(suggestions[0]);\r
+\r
+                               foreach (string suggest in suggestions) {\r
+                                       if (!string.IsNullOrEmpty(suggest)) {\r
+                                               string path = Path.Combine(suggest, this.Name);\r
+                                               if (Directory.Exists(path)) return path;\r
+                                       }\r
+                               }\r
+                               \r
+                               return null; // when not found\r
+                       } else {\r
+                               return UninstallInfo.InstallLocation;\r
+                       }\r
+               }\r
+               \r
                public static InstalledPackage PackageConverter(Package basePkg) \r
                {\r
                        InstalledPackage pkg = new InstalledPackage();\r