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
\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
{\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
\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
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
// 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
/// </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