优化JudgeOSVersion方法,支持双边版本限制

This commit is contained in:
蓝点lilac
2020-12-31 20:33:16 +08:00
parent ff71d04495
commit 58cfe56ec3
2 changed files with 30 additions and 25 deletions

View File

@@ -123,8 +123,7 @@ namespace ContextMenuManager.Controls
{
foreach(XmlElement itemXE in shellXE.GetElementsByTagName("Item"))
{
XmlElement verXE = (XmlElement)itemXE.SelectSingleNode("OSVersion");
if(!JudgeOSVersion(verXE)) continue;
if(!JudgeOSVersion(itemXE)) continue;
XmlElement szXE = (XmlElement)itemXE.SelectSingleNode("Value/REG_SZ");
string keyName = itemXE.GetAttribute("KeyName");
if(keyName.IsNullOrWhiteSpace()) continue;
@@ -153,8 +152,7 @@ namespace ContextMenuManager.Controls
{
foreach(XmlElement itemXE in shellExXE.GetElementsByTagName("Item"))
{
XmlElement verXE = (XmlElement)itemXE.SelectSingleNode("OSVersion");
if(!JudgeOSVersion(verXE)) continue;
if(!JudgeOSVersion(itemXE)) continue;
if(!GuidEx.TryParse(itemXE.GetAttribute("Guid"), out Guid guid)) continue;
EnhanceShellExItem item = new EnhanceShellExItem
{
@@ -173,28 +171,36 @@ namespace ContextMenuManager.Controls
}
}
public static bool JudgeOSVersion(XmlElement osXE)
public static bool JudgeOSVersion(XmlElement itemXE)
{
if(osXE == null) return true;
Version ver = new Version(osXE.InnerText);
Version osVer = Environment.OSVersion.Version;
int compare = osVer.CompareTo(ver);
string symbol = osXE.GetAttribute("Compare");
switch(symbol)
bool JudgeOne(XmlElement osXE)
{
case ">":
return compare > 0;
case "<":
return compare < 0;
case "=":
return compare == 0;
case ">=":
return compare >= 0;
case "<=":
return compare <= 0;
default:
return true;
Version ver = new Version(osXE.InnerText);
Version osVer = Environment.OSVersion.Version;
int compare = osVer.CompareTo(ver);
string symbol = osXE.GetAttribute("Compare");
switch(symbol)
{
case ">":
return compare > 0;
case "<":
return compare < 0;
case "=":
return compare == 0;
case ">=":
return compare >= 0;
case "<=":
return compare <= 0;
default:
return true;
}
}
foreach(XmlElement osXE in itemXE.GetElementsByTagName("OSVersion"))
{
if(!JudgeOne(osXE)) return false;
}
return true;
}
}
}

View File

@@ -37,8 +37,7 @@ namespace ContextMenuManager.Controls
foreach(XmlElement itemXE in groupXE.ChildNodes)
{
XmlElement verXE = (XmlElement)itemXE.SelectSingleNode("OSVersion");
if(!EnhanceMenusList.JudgeOSVersion(verXE)) continue;
if(!EnhanceMenusList.JudgeOSVersion(itemXE)) continue;
RegRuleItem.ItemInfo itemInfo = new RegRuleItem.ItemInfo
{
Text = itemXE.GetAttribute("Text"),